为避免创建多个活动,我有一个 Activity2 ,该代码具有以下代码,该代码使我可以从我想要的任何活动中传递一组片段。
privateArrayList<Fragment> fragArrayList;
fragArrayList = intent.getParcelableArrayListExtra("fragArrayList");
Button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setFragment(fragArrayList.get(i));
}
});
private void setFragment(Fragment fragment) {
FragmentManager manager = getSupportFragmentManager();
manager.beginTransaction()
.replace(R.id.layout, fragment)
.addToBackStack(null)
.commit();
}
在 Activity1 中,我有此代码(我知道这不起作用)
Wrong 2nd argument type. Found: 'java.util.ArrayList<android.support.v4.app.Fragment>', required: 'java.util.ArrayList<? extends android.os.Parcelable>'
。
Intent intent= new Intent(Activity1.this, Activity2.class);
ArrayList<Fragment> fragArrayList = new ArrayList<>();
fragArrayList.add(new frag1());
fragArrayList.add(new frag2());
fragArrayList.add(new frag3());
fragArrayList.add(new frag4());
fragArrayList.add(new frag5());
intent.putParcelableArrayListExtra("fragArrayList"), fragArrayList);
重点是使fragArrayList从任何活动迁移到 Activity2 。而且由于fragArrayList内的碎片会因活动而异,因此我不能将它们添加到 Activity2 内的ArrayList中。
由于存在多个活动,因此无法在 Activity2 中创建逻辑来处理用户来自每个活动的逻辑。
如何将ArrayList从Activity1传递给Activity2?
答案 0 :(得分:2)
片段不可包裹,因此您将无法通过意图传递它们。您可以通过intent传递完全限定的片段类名称,然后通过反射实例化Activity2中的片段。
答案 1 :(得分:0)
这是一个糟糕的设计,无法传递片段对象的列表,并且您只能传递对象的Parcelable类的数组。
答案 2 :(得分:0)
成功:感谢您 Greg Moens 和 gicci 的见识
活动1
Intent intent= new Intent(Activity1.this, Activity2.class);
ArrayList<String> fragArrayList= new ArrayList<>();
fragArrayList.add(String.valueOf(frag1.class.getName()));
fragArrayList.add(String.valueOf(frag2.class.getName()));
fragArrayList.add(String.valueOf(frag3.class.getName()));
fragArrayList.add(String.valueOf(frag4.class.getName()));
fragArrayList.add(String.valueOf(frag5.class.getName()));
intent.putExtra("fragArrayList"), fragArrayList);
活动2
ArrayList<String> fragArrayList = new ArrayList<>();
fragArrayList = intent.getStringArrayListExtra("fragArrayList");
Button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setFragment(fragArrayList.get(i));
}
});
private void setFragment(String fragClass) {
Fragment fragment = Fragment.instantiate(this, fragClass);
FragmentManager manager = getSupportFragmentManager();
manager.beginTransaction()
.replace(R.id.layout, fragment)
.addToBackStack(null)
.commit();
}