Невозможно установить onClick для элементов listView в RemoteView.Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Невозможно установить onClick для элементов listView в RemoteView.

Сообщение Anonymous »

Я работаю над виджетом списка дел для своего приложения для Android. Каждый элемент задачи имеет значок «Готово»; когда пользователь нажимает на нее, я хочу вызвать намерение получателя, который обновляет базу данных. Я создал ListView, заполненный из моей базы данных задач, но не могу сделать элементы интерактивными, используя любые доступные параметры RemoteViews. Вот мой код:

Код: Выделить всё

internal fun updateTodoWidget(
context: Context, appWidgetManager: AppWidgetManager, appWidgetId: Int
) {
val views = RemoteViews(context.packageName, R.layout.todo_widget)
views.setRemoteAdapter(
R.id.list, Intent(context, WidgetService::class.java).apply {
putExtra("appWidgetId", appWidgetId)
}
)
views.setTextViewText(
R.id.count, (context.readSharedPreference("todoCount", 0) as Int).toString()
)
appWidgetManager.updateAppWidget(appWidgetId, views)
}

Код: Выделить всё

class WidgetService : RemoteViewsService() {
override fun onGetViewFactory(intent: Intent?): RemoteViewsFactory {
return DataProvider(this, intent)
}
}

Код: Выделить всё

class DataProvider(widgetService: WidgetService, val intent: Intent?) : RemoteViewsService.RemoteViewsFactory {
private var myListView: MutableList = ArrayList()
private var mContext: Context? = null

override fun getViewAt(position: Int): RemoteViews {
val view = RemoteViews(mContext!!.packageName, R.layout.todo_item_widget)
view.setTextViewText(R.id.item_text, myListView[position].name)
view.setOnClickFillInIntent(
R.id.done, Intent(mContext, ActionReceiver::class.java).apply {
action = "doneTodo"
putExtra("id", myListView[position].id)
putExtra("appWidgetId", intent?.getIntExtra("appWidgetId", 69) ?: 69)
}
)

//        view.setOnClickPendingIntent(
//            R.id.done,
//            PendingIntent.getBroadcast(
//                mContext,
//                85,
//                Intent(mContext,ActionReceiver::class.java).apply {
//                    action = "doneTodo"
//                    putExtra("id",myListView[position].id)
//                    putExtra("appWidgetId",intent?.getIntExtra("appWidgetId",69)?:69)
//                },
//                PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
//            )
//        )
return view
}
}
Вот макет элемента задачи: Класс получателя работает правильно для других задач, но он не получает никаких намерений при нажатии на элемент.
Я экспериментировал с различными намерениями, например, намерения действия, но кажется, что элементы ListView недоступны для кликов.

Подробнее здесь: https://stackoverflow.com/questions/788 ... remoteview
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»