簡體   English   中英

如何傳遞ArrayList <Fragment> ?

[英]How to pass ArrayList<Fragment>?

為了避免創建多個活動,我有一個Activity2 ,該活動的代碼可以使我從想要的任何Activity中傳遞一組Fragments。

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從任何 Activity遷移到Activity2 而且由於fragArrayList內的碎片根據活動而有所不同,因此它們不能來自我,只能將它們添加到Activity2內的ArrayList中。

而且由於將存在多個活動,因此無法在Activity2內部創建邏輯來處理用戶來自的每個Activity的效率。

如何將ArrayList從Activity1傳遞給Activity2?

碎片不可包裹,因此您將無法通過意圖傳遞它們。 您可以通過intent傳遞完全限定的片段類名稱,然后通過反射實例化Activity2中的片段。

這是一個糟糕的設計,無法傳遞片段對象的列表,並且您只能傳遞對象的Parcelable類的數組。

成功感謝您: Greg Moensgicci的見解

活動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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM