gpt4 book ai didi

android - 处理 Widget ListView 中的项目点击 [Android]

转载 作者:太空狗 更新时间:2023-10-29 14:46:32 25 4
gpt4 key购买 nike

我已经搜索了数周,但找不到答案。我正在尝试在 widget 中创建一个 ListView。我设法填充了 ListView。我的问题是,当我单击 ListView 中的一个项目时,我想打开一个 Activity 并将该项目的 Id 传递给 Activity 我打电话了。但似乎我无法正确获取传递的 Id 它在转到我调用的 Activity 时始终为 null

这是我的代码

小工具提供者

public class WidgetProvider extends AppWidgetProvider {
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
....
for (int i = 0; i < N; ++i) {
RemoteViews remoteViews = updateWidgetListView(context,
appWidgetIds[i]);


appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetIds[i], R.id.listViewWidget);
appWidgetManager.updateAppWidget(appWidgetIds[i], remoteViews);
}

super.onUpdate(context, appWidgetManager, appWidgetIds);
}

private RemoteViews updateWidgetListView(Context context, int appWidgetId) {
//For ListView
Intent svcIntent = new Intent(context, WidgetService.class);
svcIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
svcIntent.setData(Uri.parse(svcIntent.toUri(Intent.URI_INTENT_SCHEME)));
remoteViews.setRemoteAdapter(appWidgetId, R.id.listViewWidget, svcIntent);
//When item is clicked on ListView
Intent startActivityIntent = new Intent(context, ActivityOne.class);
PendingIntent startActivityPendingIntent = PendingIntent.getActivity(context, 0, startActivityIntent, PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setPendingIntentTemplate(R.id.listViewWidget, startActivityPendingIntent);

return remoteViews;
}

微件服务

public class WidgetService extends RemoteViewsService {

@Override
public RemoteViewsFactory onGetViewFactory(Intent intent) {
return (new ListProvider(this.getApplicationContext(), intent));
}
}

列表提供者

 @Override
public RemoteViews getViewAt(int position) {
final RemoteViews widgetRow = new RemoteViews(
context.getPackageName(), R.layout.list_row);

ListItem listItem = listItemList.get(position);
widgetRow.setTextViewText(R.id.txtID, listItem.id);

//Pass the ID to ActivityOne
Intent fillInIntent = new Intent();
fillInIntent.putExtra("EXTRA_ID", listItem.id);
widgetRow.setOnClickFillInIntent(R.id.llRow, fillInIntent);

return widgetRow;
}

Activity 一

public class ActivityOne extends Activity {
String mID;

@Override
protected void onCreate(Bundle savedState) {

....
mID = intent.getStringExtra("EXTRA_ID");
....
}

我正在使用 ListProvider 中的 Web 服务 填充我的 ListView 并在 onDataSetChanged 上调用它>。调试它时,在填充 List 的同时,它还会将所有数据放入 EXTRA_ID 中,这可能是 Activity 时的原因opened is gets confuse and returns null instead,我不知道为什么要解决这个问题。请指导我如何解决这个问题。预先感谢您的帮助。

最佳答案

我找到了一个很棒的 example我尝试遵循它并更改数据的设置方式,然后在 AppWidgetProvideronReceive 上调用我的 ActivityOne 并将数据从我在 Bundle 中得到了什么。这link还帮助我在 AppWidgetProvider 内的 onReceive 内启动一个 Activity。我只是在删除主屏幕上的小部件时遇到应用程序崩溃。当我发现如何解决它时会更新这个答案。

编辑

我必须解决我忘记添加 onDelete 然后添加 notifyAppWidgetViewDataChanged 以及 ListView 现在工作正常的崩溃部分.

关于android - 处理 Widget ListView 中的项目点击 [Android],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39611516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com