我已经搜索这个问题好几个星期了,但找不到答案。我正在尝试在
ListView
内创建 widget
。我成功地填充了ListView
。我的问题是,当我单击 ListView
内的某个项目时,我想打开一个 Activity
并将该项目的 Id
传递给我调用的 Activity
。但似乎我无法正确获取通过的Id
,当我去我打电话的null
时,它总是Activity
。
这是我的代码
WidgetProvier
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;
}
活动一
public class ActivityOne extends Activity {
String mID;
@Override
protected void onCreate(Bundle savedState) {
....
mID = intent.getStringExtra("EXTRA_ID");
....
}
我正在使用
ListView
内部的 Web Service
填充我的 ListProvider
,并在 onDataSetChanged
上调用它。调试时,在填充 List
时,它还会将所有数据放入 EXTRA_ID
中,也许这就是为什么当 Activity
打开时会变得混乱并返回 null 的原因,我不确定为什么如何解决这个问题。请指导我如何解决这个问题。预先感谢您的帮助。
我的代码和example一样,但是我发现App在线,listview项可以通过点击onReceive()来接收广播。并且可以跳转到正确的Activity。 但是,当App被杀死,listview项点击onReceive()时,无法接收到广播,App也无法被挂起。 有人遇到过这个问题吗