Android中可点击的小部件与ListView上的ListItems不可点击

7

我遇到了让我的小部件可点击的问题。以下代码只能部分运行。我的小部件显示一个带有项的ListView。当在未显示任何项的位置点击小部件时,意图会起作用并启动Activity。但是当单击ListView的某个项时,没有任何反应。

以下是代码:

小部件提供者:

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_width="match_parent"
          android:layout_height="match_parent"
          android:orientation="vertical">
 <ListView
    android:id="@+id/WidgetItem"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:divider="#D3D3D3"
    android:dividerHeight="1dp"/>


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

ListViewItems没有任何按钮或其他控件。
谢谢您的帮助!

你尝试过让ListView的项不可点击吗?因为我认为它们会捕获点击事件。通过在ListView适配器中重写areAllItemsEnabled()之类的方法来实现。 - Beloo
我没有使用适配器。我有一个RemoteViewsFactory。在getViewAt()方法中,我将内容添加到RemoteView中,RemoteView是一个列表项。 - Tobi
1个回答

3

终于可以工作了:

在Provider 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()中接收它?我尝试了但没成功。:( - Mostafa Imran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接