Android:如何将Parcelable对象传递给Intent并使用bundle的getParcelable方法?


69

为什么捆绑有getParcelableArrayListgetParcelable方法;但是 Intent只有putParcelableArrayListExtra方法吗?我只能传送object<T>,不能传送ArrayList一个元素吗?那是getParcelable为了什么

Answers:


163

Intent提供了一堆重载的putExtra()方法。

假设您有一个Foo类正确地实现了Parcelable,将其放入Activity中的Intent中:

Intent intent = new Intent(getBaseContext(), NextActivity.class);
Foo foo = new Foo();
intent.putExtra("foo ", foo);
startActivity(intent);

要从其他活动中获取它:

Foo foo = getIntent().getExtras().getParcelable("foo");

希望这可以帮助。


我收到java.lang.ClassCastException:xxx.CDetails无法转换为android.os.Parcelable,其中CDetails是具有键和值对的自定义模型类型。intent.putExtra(“ CDetails”,(Parcelable)tempCDetails);
user1872384 '18

1
Parcelable p[] =getIntent().getParcelableArrayExtra("parcel");

我问有关getParcelable的问题吗?
yital9

它将返回您已通过的对象的数组
MAC

抱歉,您觉得getParcelableArrayExtra和getParcelable之间的区别吗?
yital9

顺便说一句,最后你想通过什么?
MAC

1
object <T>,T实现Parcelable,仅实现一个对象,而不是数组,而不是列表
yital9'4

-1

重要的是要记住,您的模型必须实现Parcelable接口和静态CREATOR方法。这种情况是列表

 private static final String MODEL_LIST = "MODEL_LIST";
    public MainFragment() {}

    public static MainFragment newInstance(ArrayList<YourModel>   
models) {
        MainFragment fragment = new MainFragment();
        Bundle args = new Bundle();
        args.putParcelableArrayList(MODEL_LIST,models);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            ArrayList<YourModel> models = getArguments().getParcelableArrayList(MODEL_LIST);
        }
    }

OP询问的是为什么Intent上不存在putParcelable,而不是如何实现Parcelable。
诺亚·吉尔莫

-2

首先使用给定技术创建Parcelable,然后

public static CreditCardDetail newInstance(CreditCardItemBO creditCardItem) {
        CreditCardDetail fragment = new CreditCardDetail();
        Bundle args = new Bundle();
        args.putParcelable(CREDIT_KEY,creditCardItem);
        fragment.setArguments(args);
        return fragment;
    }

并得到像

 if(getArguments() != null)
 {
    creditCardItem = getArguments().getParcelable(CREDIT_KEY);               
 }

哪里

public static final String CREDIT_KEY = "creditKey";
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.