0

编辑 我编辑了上一个问题,我解决了。非常感谢您的回复。

我有一个带有 3 个选项卡(新闻、策略和历史)的 gui,其中一个(新闻)我加载一个 ExpandableListView,当用户单击列表中的一个项目时,它会加载另一个包含所选项目详细信息的片段. 我设法使用以下代码将该选项卡中的片段替换为另一个片段:

    CategoryTab categories = new CategoryTab();//Fragment 2
    FragmentManager manager = activity.getFragmentManager();
    FragmentTransaction transaction = manager.beginTransaction();
    transaction.replace(this.getId(), categories, "News");
    //transaction.replace(android.R.id.content, categories, "News");
    transaction.addToBackStack(null);
    transaction.commit();

当秒片段加载到新闻选项卡中时,所有其他选项卡都会显示该片段。我正在使用这个监听器来管理标签导航

public static class TabListener<T extends Fragment> implements ActionBar.TabListener {
    private final Activity mActivity;
    private final String mTag;
    private final Class<T> mClass;
    private final Bundle mArgs;
    private Fragment mFragment;

    public TabListener(Activity activity, String tag, Class<T> clz) {
        this(activity, tag, clz, null);
    }

    public TabListener(Activity activity, String tag, Class<T> clz, Bundle args) {
        mActivity = activity;
        mTag = tag;
        mClass = clz;
        mArgs = args;

        // Check to see if we already have a fragment for this tab, probably
        // from a previously saved state.  If so, deactivate it, because our
        // initial state is that a tab isn't shown.
        mFragment = mActivity.getFragmentManager().findFragmentByTag(mTag);
        if (mFragment != null && !mFragment.isDetached()) {
            FragmentTransaction ft = mActivity.getFragmentManager().beginTransaction();
            ft.detach(mFragment);
            ft.commit();
        }
    }

    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        if (mFragment == null) {
            mFragment = Fragment.instantiate(mActivity, mClass.getName(), mArgs);
            ft.add(android.R.id.content, mFragment, mTag);
        } else {
            ft.attach(mFragment);
        }
    }

    public void onTabUnselected(Tab tab, FragmentTransaction ft) {          
        if (mFragment != null) {
            ft.detach(mFragment);
        }
    }

    public void onTabReselected(Tab tab, FragmentTransaction ft) {
        Toast.makeText(mActivity, "Reselected!", Toast.LENGTH_SHORT).show();
    }
}

我的问题是¿为什么所有选项卡在替换完成后都显示相同的片段?和¿如何使用操作栏中提供的图标模拟后退按钮,以在新闻选项卡中再次加载片段 1?

任何帮助将不胜感激

PD:对不起我的英语

4

1 回答 1

1

确保在 onActivityCreated 中或之后调用 getActivity(),因为之前它将返回 null。

Fragment 将附加到一个空活动,直到 onActivityCreated ......也就是说,如果您在 onCreate 或 onCreateView 中调用 getActivity(),它将返回 null,因为尚未创建活动。因此,请确保您在 onActivityCreated 中或之后对 getActivity() 进行了所有调用

于 2013-01-28T15:44:07.860 回答