2017-07-25 60 views
0

當從活動傳遞數據到片段(片段重疊)時,我有一個問題: 我需要傳遞數組列表的整數,其中包含複選框的ID來檢查...傳遞數據從活動到片段transaction.replace()

傳遞數據之前: enter image description here

後通數據: enter image description here

代碼以從活動數據傳遞給片段:

Bundle bundle = new Bundle(); 
    bundle.putIntegerArrayList("oki", hm); 
    System.out.println("PERO:" + bundle); 

    MyListFragment myFragment = new MyListFragment(); 
    myFragment.setArguments(bundle); 

    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
    transaction.replace(R.id.container, myFragment); 


    transaction.commit(); 

代碼來獲取數據:

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the custom_spinner_items for this fragment 
     //super.onDestroy(); 
     try { 
     bundle = getArguments(); 

     System.out.println("BUNDLES:" + bundle); 
     //if (bundle != null) { 


       strtext = bundle.getIntegerArrayList("oki"); 
       System.out.println("AH:" + strtext); 


     //} 
     }catch(Exception e){ 

     } 
+0

您需要提供更多關於應用程序的代碼和上下文。如果Fragment已經存在,請不要創建它的新實例並應用於事務中。考慮使用像MVC或MVVM或MVP這樣的體系結構來對代碼中的問題進行明確劃分。 –

+0

您能否以我的代碼爲例說明如何解決我的問題?謝謝 – androidiano

+0

不是沒有更好地理解代碼試圖做什麼以及它的結構。根據這些圖像,我懷疑在屏幕上有一個「碎片」或「ViewPager」包含碎片,但是「活動」試圖更新現有「碎片」的內容。只是基於我所看到的以及你提供的一小段代碼的猜測。在一個簡單的實現中,如果'Fragment'依賴於某些東西來「告訴」它要選擇什麼,它在創建時(通過「Bundle」)或者需要一個接口來調用以獲取該信息時需要該信息。 –

回答

0

MyListFragment

private ArrayList mArrayList; 

public void setArrayList(ArrayList arraylist) 
{ 
    this.mArrayList = arraylist; 
} 

,您可以訪問任何地方mArrayList

然後做

Bundle bundle = new Bundle(); 
    bundle.putIntegerArrayList("oki", hm); 
    System.out.println("PERO:" + bundle); 

    MyListFragment myFragment = new MyListFragment(); 
    myFragment.setArrayList(hm); 


    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
    transaction.replace(R.id.container, myFragment); 


    transaction.commit(); 
+0

片段總是重疊 – androidiano

0
In your Activity 

private List List = new ArrayList <>();

 FragmentName FragName = new FragmentName(); 
    Bundle bundle = new Bundle();        
    bundle.putParcelable("key",List); 
    FragName.setArguments(addEditBundle); 

    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
     transaction.replace(R.id.container, FragName); 

     transaction.commit(); 

In your Fragment 

private List List = new ArrayList <>();
List = getArguments()。getParcelable(「Key」);

+1

片段重疊,因爲問題是transaction.replace(R.id.container,FragName); – androidiano

+0

你可以使用transaction.add(R.id.container,FragName); –

+0

與transaction.add – androidiano