我一直在搜索這個數週,但我找不到答案。我正在嘗試在widget
內創建一個ListView
。我設法填充ListView
。我的問題是,當我點擊ListView
內的一個項目時,我想打開一個Activity
並將該項目的Id
傳遞給我所調用的Activity
。但似乎我無法正確地通過Id
,當我打電話給Activity
時,它總是null
。在Widget ListView中處理物品點擊[Android]
這裏是我的代碼
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;
}
WidgetService
public class WidgetService extends RemoteViewsService {
@Override
public RemoteViewsFactory onGetViewFactory(Intent intent) {
return (new ListProvider(this.getApplicationContext(), intent));
}
}
ListProvider
@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;
}
ActivityOne
public class ActivityOne extends Activity {
String mID;
@Override
protected void onCreate(Bundle savedState) {
....
mID = intent.getStringExtra("EXTRA_ID");
....
}
我使用的是Web Service
那是我ListProvider
內部填充我ListView
,並呼籲它onDataSetChanged
。在調試時,在List
正在填充時,它也會將所有數據放在EXTRA_ID
中,也許這就是爲什麼當打開Activity
時會變得混淆並返回null,我不確定爲什麼要如何解決此問題。請指導我如何解決這個問題。預先感謝您的幫助。
你還沒有從你的'ActivityOne'中添加代碼,你得到'null'而不是'Id'。 – Abbas
@Abbas我已經添加了我的'ActivityOne' – natsumiyu
嘗試並從'updateWidgetListView()'的'Intent'中添加'EXTRA_ID'。 – Abbas