Android 使用 setonclickfillinintent 发送 parcelable

标签 android listview android-intent android-listview parcelable

我有一个带有 ListView 的小部件。每当用户从 ListView 中按下一个项目时,我想接收一个在 Widget ListView 的适配器中编译的 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 发送到其他 Activity 在我的应用程序中工作得很好。我只在发送 parcelable 对象和 setOnClickFillInIntent 时遇到问题。

感谢任何帮助。

最佳答案

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

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

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

解决了我的问题

关于Android 使用 setonclickfillinintent 发送 parcelable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30014217/

相关文章:

android - 在自定义 ArrayAdapter 中返回空行?

xaml - 如何获取我在 ListView 中持有的项目

android - 使 Activity A 等待 Activity B 完成以继续

android - 打开谷歌地图应用并在flutter webview中显示逐向导航

c# - 通过 Xamarin IDE 从 SD 卡读取 .mp3 文件

java - 更改图像大小

android - 如何获取拨出电话的连接状态

java - 如何为带有搜索的 ListView 设置 onClickListener?不带立场

android - 单一 Intent 共享音频和文本

android - 使用 Robolectric 模拟 HttpResponse