簡體   English   中英

Android-方向變化時的動態片段問題

[英]Android - Dynamic Fragment problems on orientation change

我在動態片段方面遇到問題。 如果我不改變方向,那很好。 當我改變方向時,我單擊ListView項目。 這不是更改textview。

這是DynamicActivity類

public class DynamicActivity extends Activity implements FragmentCoordinator{

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_dynamic);

    FragmentManager fragmentManager = getFragmentManager();
    FragmentTransaction transaction = fragmentManager.beginTransaction();
    ListContentFragment listContentFragment = new ListContentFragment();
    DetailsContentFragment detailsContentFragment = new DetailsContentFragment();
    transaction.add(R.id.listContainer, listContentFragment,"listContent");
    transaction.add(R.id.detailsContainer, detailsContentFragment,"detailsContent");
    transaction.commit();

}

@Override
public void onSetContentDetails(int index) {
    FragmentManager fragmentManager = getFragmentManager();

    DetailsContentFragment detailsContentFragment = (DetailsContentFragment)fragmentManager.findFragmentByTag("detailsContent");

    detailsContentFragment.setContentDetails(index);
}

}

和DetailsContentFragment類

public class DetailsContentFragment extends Fragment {

TextView lbMess;
String[] array;
int saveIndex;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View v = inflater.inflate(R.layout.details_content_fragment, container,false);
    array = getResources().getStringArray(R.array.list_details);
    lbMess = (TextView)v.findViewById(R.id.lbDetails);

    int currentIndex = savedInstanceState == null ? 0 : savedInstanceState.getInt("indexContent",0);
    setContentDetails(currentIndex);

    return v;
}

@Override
public void onSaveInstanceState(Bundle outState) {
    outState.putInt("indexContent", saveIndex);
}

public void setContentDetails(int index) {
    saveIndex = index;
    lbMess.setText(array[saveIndex]);
}
}

我已經調試了,但是沒有任何錯誤。 請給我一些建議

我發現問題是:當系統由於運行時配置更改而破壞並重新創建活動時,該活動將自動重新實例化現有的片段。

對於在活動布局中聲明的“靜態”片段,這不是問題。

但是對於“動態”片段,我需要測試這種情況以防止創建片段的第二個實例。

我檢查傳遞給活動的onCreate()的Bundle參數是否為null。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_dynamic);

    if(savedInstanceState == null)
    {
        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        ListContentFragment listContentFragment = new ListContentFragment();
        DetailsContentFragment detailsContentFragment = new DetailsContentFragment();
        transaction.add(R.id.listContainer, listContentFragment,"listContent");
        transaction.add(R.id.detailsContainer, detailsContentFragment,"detailsContent");
        transaction.commit();
    }

}

而且它工作正常。 我認為這對有同樣問題的人很有幫助。

暫無
暫無

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

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