1

我遇到了动态片段的问题。如果我不改变方向,它工作正常。当我改变方向时,我点击 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]);
}
}

我有调试但它没有任何错误。请给我一些建议

4

1 回答 1

2

我发现问题是:当系统由于运行时配置更改而破坏并重新创建活动时,活动会自动重新实例化现有片段。

这对于在活动布局中声明的“静态”片段来说不是问题。

但是对于“动态”片段,我需要测试这种情况以防止创建我的片段的第二个实例。

我检查传递给我的活动的 onCreate() 的 Bundle 参数是否为空。

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

}

它工作正常。我认为对有同样问题的人有帮助。

于 2013-07-05T06:10:29.817 回答