作者:暗恋达志_227 | 来源:互联网 | 2022-12-31 10:23
我知道这个问题已被多次询问过,但我几乎尝试了所有解决方案,对我来说没有任何作用.所以我想我也不明白.
这是重点,我有一个主屏幕小部件,一个列表,并且像往常一样,我希望每个项目在单击时打开活动.
我看到了很多关于吐司和广播的答案,但我希望它能开启一项活动.
问题是,点击不起作用.
这就是我所做的:
该 widget_info.xml
该 Provider
class StickyWidgetProvider : AppWidgetProvider() {
override fun onReceive(context: Context, intent: Intent) {
super.onReceive(context, intent)
if (ACTION_APPWIDGET_UPDATE == intent.action) {
updateWidget(context)
}
}
override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) {
for (i in 0 until appWidgetIds.size) {
val appWidgetId = appWidgetIds[i]
val rv = RemoteViews(context.packageName, R.layout.widget_container)
rv.setRemoteAdapter(R.id.widget_list, Intent(context, MyWidgetService::class.java))
val activityIntent = Intent(context, MainActivity::class.java)
.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK)
val pendingIntent = PendingIntent.getActivity(context, 0, activityIntent, PendingIntent.FLAG_UPDATE_CURRENT)
rv.setPendingIntentTemplate(R.id.widget_list, pendingIntent)
appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetId, R.id.widget_list)
appWidgetManager.updateAppWidget(appWidgetId, rv)
}
}
private fun updateWidget(context: Context) {
val appWidgetManager = AppWidgetManager.getInstance(context)
appWidgetManager.notifyAppWidgetViewDataChanged(
appWidgetManager.getAppWidgetIds(
ComponentName(context, StickyWidgetProvider::class.java)
),
R.id.widget_list)
}
}
而且 RemoteViewsFactory
class StickyWidgetRemoteViewsFactory(private val context: Context) : RemoteViewsService.RemoteViewsFactory {
private var itemList: List? = null
private fun updateWidgetListView() {
itemList = filled by somrthing
}
override fun onCreate() {
updateWidgetListView()
}
override fun onDataSetChanged() {
updateWidgetListView()
}
override fun onDestroy() {
itemList = null
}
override fun getCount(): Int {
return if (itemList != null)
itemList!!.size
else
0
}
override fun getViewAt(position: Int): RemoteViews {
val remoteView = RemoteViews(context.packageName, R.layout.widget_row)
val item = itemList!![position]
// fill the view //
val bundle = Bundle()
bundle.putParcelable(MainActivity.EXTRA_ITEM, item)
val fillInIntent = Intent().putExtras(bundle)
remoteView.setOnClickFillInIntent(R.id.widget_item, fillInIntent)
return remoteView
}
...
}
我无法弄清楚我在这里做错了什么.继引导https://developer.android.com/guide我有setPendingIntentTemplate
在Provider
,通过填充setOnClickFillInIntent
在工厂,但该项目点击什么都不做.
对于信息的小部件是LinearLayout
与一些TextViews
它们android:textIsSelectable="false"
,android:clickable="false"
和android:focusable="false"
我不知道我在这里缺少什么,所以任何帮助都是好的!
谢谢