修改 我编辑了上一个问题,我解决了。非常感谢回复。
我有一个gui有3个标签(新闻,策略和历史),其中一个(新闻)我加载了一个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:抱歉我的英文
答案 0 :(得分:1)
确保在onActivityCreated中或之后调用getActivity(),之前它将返回null。
Fragment将附加到null活动,直到onActivityCreated ...也就是说,如果在onCreate或onCreateView中调用getActivity(),它将返回null,因为尚未创建Activity。因此,请确保在onActivityCreated
之后或之后调用getActivity()