我的活动包含 2 个片段(TitlesFragment 和 main_detailFragment):
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main_LinearLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:orientation="horizontal"
    android:baselineAligned="false">
    <fragment
        android:id="@+id/main_titlesFragment"
        class="ru.neverdark.phototools.fragments.TitlesFragment"
        android:layout_weight="1"
        android:layout_width="0px"
        android:layout_height="match_parent"/>
    <FrameLayout android:id="@+id/main_detailFragment"
        android:layout_weight="2"
        android:layout_width="0px"
        android:layout_height="match_parent" />
我的应用程序包含 5 个不同的片段,用于在main_detailFragment FrameLayout 中显示。
为了替换我写函数的片段:
    /**
     * Replace current fragment to other
     * @param details new fragment object
     * @param index index fragment
     */
    private void replaceFragment(Fragment details, int index) {
        Log.message("Enter");
        boolean isOperationNeed = false;
        switch (index) {
        case Constants.DOF_CHOICE:
            try {
                details = (DofFragment) getFragmentManager().findFragmentById(
                        R.id.main_detailFragment);
            } catch (ClassCastException e) {
                Log.message("Exception: " + e.getMessage());
            }
            if (details == null) {
                details = new DofFragment();
                isOperationNeed = true;
            }
            break;
        case Constants.EV_CHOICE:
            try {
                details = (EvpairsFragment) getFragmentManager().findFragmentById(
                        R.id.main_detailFragment);
            } catch (ClassCastException e) {
                Log.message("Exception: " + e.getMessage());
            }
            if (details == null) {
                details = new EvpairsFragment();
                isOperationNeed = true;
            }
            break;
        /* .. repeating code for other fragments */
        }
        if (isOperationNeed == true) {
            FragmentTransaction ft = getFragmentManager().beginTransaction();
            ft.replace(R.id.main_detailFragment, details);
            ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
            ft.commit();
        }
    }
当用户单击 TitlesFragment 中的项目时,我调用函数:
/**
 * Shows fragment by index
 * @param index fragment index for shown
 */
private void showFragment(int index) {
    Log.message("Enter");
    switch (index) {
    case Constants.DOF_CHOICE:
        replaceFragment(mDofFragment, index);
        break;
    case Constants.EV_CHOICE:
        replaceFragment(mEvFragment, index);
    /* ... */
    }
}
在 TitlesFragment 上
public void onListItemClick(ListView listView, View view, int position, long id) {
    Log.message("Enter");
    showFragment(position);
}
如何改进功能replaceFragment?
在我的情况下,当用户通过单击 TitlesFragment 更改片段时出现异常。我记录了原因,但没有采取任何行动,就像我的情况一样,这是正常的。但我不喜欢这段代码,我不明白如何改进它。
如何重写此函数以排除发生异常?