Android 使用 setonclickfillinintent 发送 Parcelable

Posted

技术标签:

【中文标题】Android 使用 setonclickfillinintent 发送 Parcelable【英文标题】:Android sending parcelable with setonclickfillinintent 【发布时间】:2015-07-12 21:35:15 【问题描述】:

我有一个带有列表视图的小部件。每当用户从列表视图中按下一个项目时,我都想接收在 Widget 列表视图的适配器中编译的 Parcelable 对象。

到目前为止一切正常,除了我无法接收 Parcelable 对象(其他一切正常)

适配器:

@Override
public RemoteViews getViewAt(int position) 
    ...
    Intent fillIntent = new Intent();
    fillIntent.putExtra("info", info); //info is a parcelable object
    fillIntent.setData(Uri.parse(fillIntent.toUri(Intent.URI_INTENT_SCHEME)));
    listViewItem.setOnClickFillInIntent(R.id.widget_listview_item, fillIntent);
    ...

提供者:

@Override
public void onReceive(Context context, Intent intent)
    ...
    else if(intent.getAction().equals(ACTION_CLICK_LISTITEM))
        Info info = intent.getParcelableExtra("info");
        // show details
        if(info != null)
            Intent startIntent = new Intent(context, DetailActivity.class);
            startIntent.putExtra("info", info);
            startIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startIntent.setData(Uri.parse(startIntent.toUri(Intent.URI_INTENT_SCHEME)));
            context.startActivity(startIntent);
        else
            Log.i(Constants.LOG_TAG, "info is null.");
        
    
    ...

我总是记录“信息为空。”...

注意:将 Info 类型的对象作为 parcelables 发送到其他活动在我的应用程序中工作得很好。我只在发送 parcelable 对象和 setOnClickFillInIntent 时遇到问题。

任何帮助表示赞赏。

【问题讨论】:

检查您的 logcat 并发布您看到的任何错误。 【参考方案1】:

据我所知,这个问题是由系统进程解析 Intent extras 引起的,系统进程没有适当的解析器来解析自定义 Parcelable 对象,请参阅 cmets 了解此问题:https://code.google.com/p/android/issues/detail?id=6822 了解详情

作为一种解决方法,您可以按照 cmets 中的建议将 Parcelable 包装在额外的 Bundle 对象中:

Bundle hackBundle = new Bundle();
hackBundle.put("key", myParcelable);
intent.putExtra("bundleKey", hackBundle);

它解决了我的问题

【讨论】:

以上是关于Android 使用 setonclickfillinintent 发送 Parcelable的主要内容,如果未能解决你的问题,请参考以下文章

Android之SharedPreferences使用

想要使用cordova/android禁用android的HardBack按钮

如何在Mac中使用Android SDK

何时使用“?android”或“@android”?

Android 安装包优化Android 中使用 SVG 图片 ( 使用 appcompat 支持库兼容 5.0 以下版本的 Android 系统使用矢量图 )

Android Handler使用