在Android开发中在片段之间传递对象数组列表

时间:2017-05-11 07:27:24

标签: java android android-fragments

我试图在Android开发中的片段之间传递arraylist。这是我试图将Transaction数组列表传递给另一个片段的部分:

switch (menuItem.getItemId()){

                case R.id.expenses:
                    final ExpenseActivity expenseFragment = new ExpenseActivity();
                    new GetAllTransactionAsyncTask(
                            new GetAllTransactionAsyncTask.OnRoutineFinished() {
                                public void onFinish() {
                                    FragmentTransaction expsenseTransaction = getSupportFragmentManager().beginTransaction();
                                    Bundle bundle = new Bundle();
                                    //bundle.putParcelableArrayList("transactionlist", GetAllTransactionAsyncTask.allTransaction);
                                    //bundle.putString("transactionlist", GetAllTransactionAsyncTask.allTransaction);
                                    expenseFragment.setArguments(bundle);
                                    expsenseTransaction.replace(R.id.frame,expenseFragment);
                                    expsenseTransaction.commit();
                                }
                            }).execute(session_accountID);


                    return true;
}

GetAllTransactionAsyncTask.allTransaction将返回一个事务数组列表。至于我的事务实体类,我实现了Serializable:

import java.io.Serializable;

@SuppressWarnings("serial")
public class Transaction implements Serializable{
...
}

我不确定如何在片段之间传递对象数组列表。我注释掉了两行,因为它们是不兼容的类型。

有什么想法吗?提前谢谢。

4 个答案:

答案 0 :(得分:11)

ArrayList<Transaction> transactionList = new ArrayList<>();

将transactionList传递给bundle

Bundle bundle = new Bundle();
bundle.putSerializable("key", transactionList);

和接收片段

ArrayList<Transaction> transactionList = (ArrayList<Transaction>)getArguments().getSerializable("key");

注意:要通过bundle传递bean类,你必须实现序列化,即

YourBeanClass实现Serializable

答案 1 :(得分:2)

build.gradle compile 'com.google.code.gson:gson:2.7'

中添加此gradle
String str = new Gson().toJson(arrayList);
bundle.putStrin("str",str);

和目的地fragemnt

String str = bundle.getString("str");

arrayList = new Gson().fromJson(str,ArrayList.class);

答案 2 :(得分:1)

1.您可以通过转换为@Bhupat指定的json来传递它。

2.另一种方法是将您的Transaction类设为parcelable并使用

 b.putParcelableArrayList("list",your_list);

获取清单

your_list = getArguments().getParcelableArrayList("list");

EDIT 你有太多的sepcigy类型令牌来取回它

 transactionlist = new Gson().fromJson(str,  new TypeToken<List<type of the list passed>>);

在您的情况下new TypeToken<List<Transaction>>

答案 3 :(得分:0)

您应该使您的Transaction类实现Serializable,而不是实现Parcelable。 Parcelable是您可以在Android上使用的最快的序列化机制,它比Serializable或JSON转换更快,并且使用更少的内存。