2016-10-21 93 views
0

我有一個包含含有5個片段的視圖尋呼機一個活動「A」。 其中一個片段具有以編程方式添加的超過7-8個片段。 使用在各個片段中定義的靜態方法實例()來實例化每個片段。查看尋呼機和內部片段的片段 - 空白屏幕

for(int i = 0 ; i < 10; i++) { 
    CustomFragment fragment = (CustomFragment) Class.forName(classNameList.get(i)).instance(); 
    getFragmentManager().beginTransaction().add(R.id.parentLinearLayout, fragment, fragmentTag).commitAllowingStateLoss(); 
} 

當此活動啓動並遍歷不同片段時,一切正常。

但如果我發起的活動「B」,並返回到行動「A」。視圖分頁器中的所有其他分片除了包含片段集的分片之外都可以正常加載。 它顯示爲一個空白屏幕。可能是什麼問題呢?

+0

你是否使用構造函數初始化該片段? – MohanadMohie

+0

是的,我是.. @MohanadMohie以任何方式影響或影響嗎? –

+0

當然。碎片,像活動,由Android系統實例化而不使用構造函數,因此當Android重新實例化碎片時,您在構造函數中傳遞的項目被忽略。您可以在ViewPager中使用之前將參數添加到片段。我會用一個簡短的例子發佈一個答案。 – MohanadMohie

回答

0

您正在使用一個構造函數來實例片段,並通過您的參數,而當Android的重新實例化它不使用你的構造函數中的片段,因此你的參數被忽略。你應該使用參數來傳遞你的參數。這是你如何能做到這樣一個例子:

內MyFragment.java:

private static final String KEY_ITEM = "item"; 

public static MyFragment getFragment(String myItem) { 
    MyFragment fragment= new MyFragment(); 
    Bundle args = new Bundle(); 
    args.putString(KEY_ITEM, myItem); 
    fragment.setArguments(args); 
    return fragment; 
} 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    String myItem = getArguments().getString(KEY_ITEM); 
} 

裏面你ViewPager適配器:

@Override 
    public Fragment getItem(int position) { 
     return MyFragment.getFragment("Your parameter here."); 
    } 

當然,我用了一個單字符串作爲參數,您可以根據需要添加儘可能多的參數。