如何通过ArrayList <fragment>?

时间:2018-11-13 18:02:10

标签: java android android-fragments arraylist

为避免创建多个活动,我有一个 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?

3 个答案:

答案 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();
}