Android popBackStack不会在ListFragment中加载ListView

时间:2014-05-21 14:52:15

标签: android android-fragments android-listview back-stack android-nested-fragment

我遇到了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的新手,但这是我的第二个问题帖子,所以我可能不会正确地遵循惯例......

1 个答案:

答案 0 :(得分:4)

显然在一些帮助下我解决了这个问题...... 我在FragmentActivity中添加了片段事务,并使用我的onListItemClick()回调方法调用FragmentActivity方法,该方法应该运行事务。

在EventFragment中取代:

FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
viewpager.setAdapter(new MyAdapter(fragmentManager));

使用:

viewpager.setAdapter(new MyAdapter(getChildFragmentManager()));

主要是getChildFragmentManager()解决了我的问题。