我遇到了popBackStackImmediate
后我的ListFragment为空的问题
我有一个扩展FragmentActivity
的主要活动,我的主要活动附有Navigation drawer
。第一个导航调用Fragment,它有一个自定义适配器,实现FragmentStatePagerAdapter
显示三个选项卡。每个选项卡都是自己的ListFragments。当我点击列表的任何一行时,它转到另一个片段,直到这一切正常,现在我想实现backstack
,这样当用户从详细页面按回按钮时,他们可以返回到FragmentList再次页面。当我按下后退按钮时,它会将我带回FragmentList页面,该页面很好,但页面是空的,由于某种原因,列表没有显示出来。我已经检查了日志,发现数据已存在,直到代码的最后一位没有任何错误,但页面是空的,任何人都可以帮我吗?
当我从任何选项卡的列表中选择任何项目时,我将事务添加到backstack中并转到详细信息片段:
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
Fragment fragment = new LiveMatchDetailMainFragment();
android.support.v4.app.FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.content_frame, fragment);
fragmentTransaction.addToBackStack("LiveFragment");
fragmentTransaction.commit();
}
在我的主要活动中,我有这个:
@Override
public void onBackPressed(){
Log.d("stack","back pressed");
FragmentManager fm = getSupportFragmentManager();
if (fm.getBackStackEntryCount() > 0)
{
//fm.popBackStack();
boolean done = fm.popBackStackImmediate();
Log.i("stack", String.valueOf(done));
} else
{
Log.i("stack", "nothing on backstack, calling super");
super.onBackPressed();
}
}
它带我到精确标签,我点击列表中的项目,但唯一的问题是片段是空的。 在FragmentList页面中,我有:
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
LiveMatchList = new ArrayList<HashMap<String, Object>>();
//Log.d("LiveMatchList setUserVisibleHint","setUserVisibleHint");
new LoadUpcomingMatchList().execute();
}
}
使用自定义适配器创建一个列表,并且它第一次正常工作,当我弹出backstack时,此方法会调用并加载所有数据,直到onPostExecute
,但列表从未显示,抱歉伙计我不是stackoverflow的新手,但这是我的第二个问题帖子,所以我可能不会正确地遵循惯例......
答案 0 :(得分:4)
显然在一些帮助下我解决了这个问题...... 我在FragmentActivity中添加了片段事务,并使用我的onListItemClick()回调方法调用FragmentActivity方法,该方法应该运行事务。
在EventFragment中取代:
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
viewpager.setAdapter(new MyAdapter(fragmentManager));
使用:
viewpager.setAdapter(new MyAdapter(getChildFragmentManager()));
主要是getChildFragmentManager()
解决了我的问题。