如何传递数据并从Widget中打开一个Activity?[Android]产品

nat*_*iyu 9 android listview widget

在我ListProvider实现的类中,RemoteViewsFactory我已经在下面编写了以下代码:

@Override
public RemoteViews getViewAt(int position) {
    RemoteViews rv = new RemoteViews(mContext.getPackageName(), R.layout.list_row);

rv.setTextViewText(R.id.heading, merch_name);
        rv.setTextViewText(R.id.content, teaser);

        Bundle extras = new Bundle();
        extras.putInt(WidgetProvider.EXTRA_ITEM, position);
        extras.putString(WidgetProvider.MERCHANT_ITEM, mWidgetItems.get(position).merchant_id);


        Intent fillInIntent = new Intent();
        fillInIntent.putExtras(extras);
        rv.setOnClickFillInIntent(R.id.llRow, fillInIntent);

  return rv;
}
Run Code Online (Sandbox Code Playgroud)

当我点击时,我把Logs in my onReceiveof WidgetProviderit中有正确的ID,但是在打开活动后它没有正确的ID放在哪里extras.还有时间,它没有打开Activity我提供的,只是打开我的MainActivity.当我从中删除我的应用程序recently open app然后使用时,会发生这种情况widget.

这里是我的代码onReceive在我WidgetProvider

 public class WidgetProvider extends AppWidgetProvider {

 public static final String TOAST_ACTION = "my.packagename.TOAST_ACTION";
public static final String MERCHANT_ITEM = "my.packagename.MERCHANT_ITEM";

@Override
public void onReceive(Context context, Intent intent) {
    AppWidgetManager mgr = AppWidgetManager.getInstance(context);

    if (intent.getAction().equals(TOAST_ACTION)) {
        int appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
                AppWidgetManager.INVALID_APPWIDGET_ID);

        Intent goToDetails = new Intent(context, DetailsActivity.class);
        goToDetails.putExtra(Constants.MERCHANT_ID, intent.getStringExtra(MERCHANT_ITEM) );

        goToDetails.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(goToDetails);

      super.onReceive(context, intent);

    }
Run Code Online (Sandbox Code Playgroud)

这就是我获取ID的方式 DetailsActivity

 public class DetailsActivity extends Activity {

 String merchantID;

 @Override
protected void onCreate(Bundle savedState) {

 super.onCreate(savedState);
    setContentView(R.layout.detailsactivity);

  Bundle extras = getIntent().getExtras();
    if (extras != null) {
        merchantID = extras.getString(Constants.MERCHANT_ID);
    }
Run Code Online (Sandbox Code Playgroud)

怎么解决这个?先感谢您.

nat*_*iyu 3

setData()onReceive传递数据的地方添加了。

 @Override
public void onReceive(Context context, Intent intent) {
 super.onReceive(context, intent);

    if (intent.getAction().equals(TOAST_ACTION)) {
    int appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
            AppWidgetManager.INVALID_APPWIDGET_ID);

    Intent goToDetails = new Intent(context, DetailsActivity.class);
    goToDetails.putExtra(Constants.MERCHANT_ID, intent.getStringExtra(MERCHANT_ITEM) );

    goToDetails.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    goToDetails.setData(Uri.parse(goToDetails.toUri(Intent.URI_INTENT_SCHEME)));
    context.startActivity(goToDetails);



}

}
Run Code Online (Sandbox Code Playgroud)

但是,如果我卸载该应用程序然后安装并且不先打开该应用程序然后添加一个widget并单击ListView.

发现它崩溃的原因是因为我的数据库仍然不存在。因为我正在创建我的数据库SplashActivity