安卓-动态碎片问题的方向改变



我遇到了动态片段的问题。如果我不改变方向,它工作得很好。当我改变方向时,我会点击ListView项目。这不是更改文本视图。

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

而且效果很好。我认为这对有同样问题的人很有帮助。

最新更新