繁体   English   中英

导航回嵌套片段中的viewpager片段

[英]Navigating back to a viewpager fragment in a nested fragment

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

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

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

我正在使用v4和v7 appcompat库。

任何帮助我将不胜感激。 提前致谢。

编辑:我设法从子片段导航回到操作栏选项卡。 我是通过以下代码实现的:

//使用getChildFragmentManager()而不是getSupportFragmentManager()FragmentManager fm = getChildFragmentManager();

MyFragmentPagerAdapter fragAdapter =新的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);

返回super.onCreateView(inflater,container,savedInstanceState);

}

公共无效onViewCreated(视图视图,捆绑saveInstanceState){

     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,selectLocation){

        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);

}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM