带有 ListView 的 Android 可点击小部件在 ListItems 上不可点击

Posted

技术标签:

【中文标题】带有 ListView 的 Android 可点击小部件在 ListItems 上不可点击【英文标题】:Android clickable Widget with ListView not clickable on ListItems 【发布时间】:2015-11-24 13:47:10 【问题描述】:

我无法让我的小部件可点击。以下代码部分工作。我的小部件显示一个带有项目的 ListView。当单击没有显示任何项目的小部件时,Intent 起作用并且 Activity 启动。但是当点击 ListView 的一个项目时,什么也没有发生。

代码如下: WidgetProvicer:

public void onUpdate(final Context context, final AppWidgetManager appWidgetManager, final int[] appWidgetIds) 


    for (final int iD : appWidgetIds) 

        final RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout
                .widget_layout);

        final Intent intent = new Intent(context, TickWidgetService.class);
        intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, iD);
        intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
        remoteViews.setRemoteAdapter(R.id.WidgetItem, intent);

        remoteViews.setEmptyView(R.id.WidgetItem, R.id.empty_view);

        final Intent activityIntent = new Intent(context, MainActivity.class);
        final PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, activityIntent, 0);

        remoteViews.setOnClickPendingIntent(R.id.Widget, pendingIntent);


        appWidgetManager.updateAppWidget(iD, remoteViews);
        appWidgetManager.notifyAppWidgetViewDataChanged(iD, R.id.WidgetItem);
    

    super.onUpdate(context, appWidgetManager, appWidgetIds);

widget_layout.xml:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:id="@+id/Widget"
          android:layout_
          android:layout_
          android:orientation="vertical">
 <ListView
    android:id="@+id/WidgetItem"
    android:layout_
    android:layout_
    android:divider="#D3D3D3"
    android:dividerHeight="1dp"/>


 <TextView
    android:id="@+id/empty_view"
    android:layout_
    android:layout_
    android:background="@android:color/darker_gray"
    android:gravity="center"
    android:text="@string/emptytext"
    android:visibility="gone"/>
 </LinearLayout>

ListViewItems 没有按钮或任何东西。

感谢您的帮助!

【问题讨论】:

您是否尝试过仅使列表视图项目不 clicable?因为我认为他们会捕捉到点击事件。通过覆盖列表视图适配器中的 areAllItemsEnabled() 或某事? 我没有使用适配器。我有一个 RemoteViewsFactory。在getViewAt()方法中我将内容添加到RemoteView,一个RemoteView就是一个ListItem。 【参考方案1】:

终于成功了:

在 Profider onUpdate 中:

final Intent activityIntent = new Intent(context, MainActivity.class);
final PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, activityIntent, PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setPendingIntentTemplate(R.id.WidgetItem, pendingIntent);

并在 ViewsFactory 中 getViewAt:

Bundle infos = new Bundle();
infos.putInt(TickWidgetProvider.WIDGET_LISTID, this.listId);
final Intent activityIntent = new Intent();
activityIntent.putExtras(infos);

remoteView.setOnClickFillInIntent(R.id.widgetListItemLayout, activityIntent);

不知道我在哪里找到的,但这个例子帮助我使它工作: https://github.com/commonsguy/cw-advandroid/tree/master/AppWidget/LoremWidget

【讨论】:

我通过在 MainActivity 中沿意图捕获点击事件来使其工作。有没有办法在 onReceive() 上接收它?我试过但没有用。 :(

以上是关于带有 ListView 的 Android 可点击小部件在 ListItems 上不可点击的主要内容,如果未能解决你的问题,请参考以下文章

Android - ListView 没有收到带有可点击链接的文本视图的 OnItemClick

带有可点击/可编辑小部件的 ListView

带有 CursorAdapter 的 Android ListView 项目 onClick 仅在一些点击后工作

可点击元素的 ListView 中的 Android LongClick

android小部件内ListView中的多个可点击项目

Android - ListView 中的延迟点击