当意图传递给其他活动时,为啥从 parcelable 中得到错误的值?

Posted

技术标签:

【中文标题】当意图传递给其他活动时,为啥从 parcelable 中得到错误的值?【英文标题】:Why getting wrong value from parcelable when passed with intent to other activity?当意图传递给其他活动时,为什么从 parcelable 中得到错误的值? 【发布时间】:2020-03-31 04:40:19 【问题描述】:

我正在尝试通过捆绑将数据从适配器传递到活动。

我正在检查一个复选框

            checkboxSelectSubCategory.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() 
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
                if (isChecked) 
                    productModelsAL.get(getAdapterPosition()).setCategorySelected(true);
                else 
                    productModelsAL.get(getAdapterPosition()).setCategorySelected(false);
                
            
        );

并在我调试的对象中正确设置数据:

   Intent intent = new Intent(mContext, SelectProductActivity.class);
   Bundle bundle = new Bundle();
   bundle.putParcelable("productModel", productModelsAL.get(getAdapterPosition()));
   intent.putExtras(bundle);
   mContext.startActivity(intent);

但在活动中,我没有收到传递的布尔值。 在活动的onCreate:

    Intent intent = getIntent();
    if (intent != null) 
        Bundle bundle = intent.getExtras();
        if (bundle != null) 
            subCategory = (SubCategory) bundle.getParcelable("productModel");
        
    
    allProductsSelected = subCategory.isCategorySelected();

为什么我没有得到我传递的价值??

【问题讨论】:

请接受您的回答,因为这会将问题从未回答的问题列表中删除,并且可能会帮助遇到类似问题的其他人。 【参考方案1】:

实际上,我的 Model 类不正确。

我首先正确地实现了模型类 n。

但对于额外的功能,我在模型中包含了 checkbox 并创建了 setter getter。但没有更新Parcelable 所需的方法。

解决方案:

我删除了Parcelable 的三个自动生成方法。

    构造函数 创作者 writeToParcel

并使用Alt+Enter 重新创建它们。

就是这样。

这有点无知,我浪费了很多时间。只是觉得它可能会对某人有所帮助。

【讨论】:

你也可以不使用bundle,intents有一个putExtra方法,它接受一个parcelable,即putExtra("productModel", myParcelableObject),然后用getIntentI()把它放在另一边。 getParcelableExtra(...);

以上是关于当意图传递给其他活动时,为啥从 parcelable 中得到错误的值?的主要内容,如果未能解决你的问题,请参考以下文章

如何将活动中的意图传递给已打开的片段

通过意图将地址传递给 Google 地图活动:

在android中通过意图传递数据

将捆绑包/意图传递给另一个活动?

使用意图将变量传递给另一个android活动

如何将值从其他活动传递给 viewpager 片段?