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

时间:2016-09-20 06:29:19

标签: android listview widget

在我实施ListProvider的{​​{1}}课程中,我推出了以下代码:

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; } onReceive中的日志设置为正确的ID,但是在打开活动后,它没有正确的ID,因为它放在{{1}中}。还有时间,它无法打开我提供的WidgetProvider,只是打开我的extras。当我从Activity移除我的应用然后使用MainActivity时会发生这种情况。

以下是我recently open app

widget的代码
onReceive

这就是我在WidgetProvider

中获取ID的方式
 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);

    }

如何解决这个问题?提前谢谢。

1 个答案:

答案 0 :(得分:4)

我在我传递数据的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);



}

}

但是我遇到了崩溃,如果我取消安装应用程序然后安装并且不首先打开应用程序然后添加widget并单击ListView

发现为什么它崩溃因为我的数据库它仍然不存在。因为我在SplashActivity

中创建了我的数据库