【问题标题】:Navigating back to a viewpager fragment in a nested fragment导航回嵌套片段中的 viewpager 片段
【发布时间】:2015-07-05 14:01:01
【问题描述】:

我有一个在应用启动时加载的 ViewPagerContainer 片段。 ViewPagerContainer 片段将两个选项卡(选项卡 A 和选项卡 B)添加到操作栏。 Tab B 有一个包含两个项目的 listView。

我做了什么: 我将点击监听器附加到选项卡 B 片段中的列表视图项,这样当用户单击一个项目时,它会在第一个片段内(即选项卡 B 下)打开另一个片段(子片段)。

我卡住的地方: 当用户按下后退按钮时,我想返回选项卡 B。我尝试通过将子片段添加到后台堆栈来实现这一点,但不幸的是它不会返回到选项卡 B 片段。请帮助我解决这个问题,我对此进行了大量研究,包括实施 backstack hack,但没有成功。

我正在使用 v4 和 v7 appcompat 库。

任何帮助我都会非常感激。提前致谢。

已编辑: 我设法从子片段导航回操作栏选项卡。我通过以下代码实现了这一点:

//使用 getChildFragmentManager() 代替 getSupportFragmentManager() FragmentManager fm = getChildFragmentManager();

MyFragmentPagerAdapter fragAdapter = new MyFragmentPagerAdapter(fm);

viewPager.setAdapter(fragAdapter);

但是,在后退导航中,选项卡的数量翻了一番,其中只有两个是可点击的,我可以看到它们的内容。当我再次单击第二个选项卡上的 listItem 然后向后导航时,又添加了两个选项卡,并且继续进行。我该如何解决这个问题?这是代码

标签 B 片段: 公共类 FindStylist 扩展 ListFragment {

String[] selectCat = {
        "category A",
        "Category B"
};

private ListView listView;
String mTime;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){

ArrayAdapter myAdapter = new ArrayAdapter(inflater.getContext(), android.R.layout .simple_list_item_1, selectCat){

        public View getView(int position, View convertView, ViewGroup parent){

            View view = super.getView(position, convertView, parent);

            TextView tv = (TextView) view.findViewById(android.R.id.text1);

            tv.setTextColor(Color.BLACK);
            tv.setGravity(Gravity.CENTER);

            return view;

            //listView = view.getListView();

        }
    };

    setListAdapter(myAdapter);

return super.onCreateView(inflater, container, savedInstanceState);

}

public void onViewCreated(View view, Bundle savedInstanceState){

     listView = getListView();
            listView.setOnItemClickListener(new OnItemClickListener(){
                public void onItemClick(AdapterView<?> parent, View view, int position, long id){
                    if(position == 0){
                        //best clicked
                        Toast.makeText(getActivity(), " catA clicked " + position, 5).show();

                    }else if(position == 1){
                        //nearest clicked
                        Toast.makeText(getActivity(), "CatB clicked " + position, 5).show();

                        FragmentNearest fragment = new FragmentNearest();
                        getActivity().getSupportFragmentManager().beginTransaction()
                        .replace(R.id.mainContent, fragment)
                        .addToBackStack(null)
                        .commit();
                    }

                }
            });
}

}

B 的子片段:

公共类 FragmentNearest 扩展 ListFragment{

String[] selectLocation = {"From Current Location", "Choose a Location"};

私有ListView listView;

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){

ArrayAdapter myAdapter = new ArrayAdapter(inflater.getContext(), android.R.layout .simple_list_item_1,选择位置){

        public View getView(int position, View convertView, ViewGroup parent){

            View view = super.getView(position, convertView, parent);

            TextView tv = (TextView) view.findViewById(android.R.id.text1);

            tv.setTextColor(Color.BLACK);
            tv.setGravity(Gravity.CENTER);

            return view;

        }
    };

    setListAdapter(myAdapter);

    return super.onCreateView(inflater, container, savedInstanceState);

}

【问题讨论】:

  • 你能添加一些代码吗?
  • @caleb 检查我编辑的帖子
  • 你在哪里构建标签?它可能不在片段的正确生命周期中,也是 getChildFragmentManager().popBackStack();应该回到正确的片段

标签: java android android-viewpager


【解决方案1】:

您应该像这样覆盖活动类中的 onBackPressed 方法。

    @Override
    public void onBackPressed()
    {
        if (iCanBackToFragment)
        {
            popBackStackOrWhateverYouUseToBack()
        }
        else
        {
            super.onBackPressed();
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-14
    • 1970-01-01
    • 2013-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多