我想将ArrayList传递给新活动,在新活动中我将使用ArrayAdapter加载列表。
但我无法将对象转移到我在新活动上获取null的新活动。
我已经读过我需要对Person类实现序列化... 这是唯一的方法吗?
这是我的代码:
AsyncTask onPostExecute我正在获取数组。
@Override
protected void onPostExecute(ArrayList<Person> personArrayList){
Intent intent = new Intent(activity, ResultsActivity.class);
intent.putExtra("personArrayList",personArrayList);
activity.startActivity(intent);
}
使用putExtra发送。
这是假设接收数组的Activity。
public class ResultsActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_results);
Intent intent = getIntent();
ArrayList<Person> personArrayList = (ArrayList<Person>) intent.getSerializableExtra("personArrayList");
PeopleAdapter adapter = new PeopleAdapter(this, personArrayList);
// Find the {@link ListView} object in the view hierarchy of the {@link Activity}.
// There should be a {@link ListView} with the view ID called list, which is declared in the
// activity_results.xml layout file.
ListView listView = (ListView) findViewById(R.id.list);
// Make the {@link ListView} use the {@link WordAdapter} we created above, so that the
// {@link ListView} will display list items for each {@link Person} in the list.
listView.setAdapter(adapter);
}
}
因此在接收端,ArrayList为空。想法?
答案 0 :(得分:1)
通过使您的类Person
实现Parcelable
接口来传输此ArrayList。一旦完成,您需要做的就是写:
@Override
protected void onPostExecute(ArrayList<Person> personArrayList){
Intent intent = new Intent(activity, ResultsActivity.class);
intent.putParcelableArrayListExtra("personArrayList",personArrayList);
activity.startActivity(intent);
}
在您的ResultsActivity类中,您可以通过编写intent.getParcelableArrayListExtra("personArrayList")
希望这有帮助。
答案 1 :(得分:0)
是的,您需要在Serializable
课程上实施Person
。
ArrayList
是可序列化的,但如果其内容不可用,则无法对其进行序列化/反序列化。
只需将implements Serializable
添加到您的班级,您就可以了。
答案 2 :(得分:0)
您可以使用应用程序类为此类场景使用全局变量来设置和获取值。但请注意,它不是完全可靠的解决方案。
用于设置值
((ApplicationClassName)getApplicationContext()).setDataArrayList(personArrayList);
用于检索值
ArrayList<Person> personArrayList =((ApplicationClassName)getApplicationContext()).getDataArrayList();