首页 文章

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

提问于
浏览
0

我有一个ViewPagerContainer片段,在应用启动时加载 . ViewPagerContainer片段将两个选项卡(选项卡A和选项卡B)添加到操作栏 . 选项卡B有两个项目的列表视图 .

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

我被卡住的地方:当用户按下后退按钮时,我想返回标签B.我尝试通过将子片段添加到backstack来实现这一点,但遗憾的是它不会返回到tab B片段 . 请帮助我解决这个问题,我已经对此进行了大量研究,包括实施背包黑客并没有成功 .

我正在使用v4和v7 appcompat库 .

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

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

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

MyFragmentPagerAdapter fragAdapter = new MyFragmentPagerAdapter(fm);

viewPager.setAdapter(fragAdapter);

但是,在后退导航中,标签数量加倍,只有两个可点击,我可以看到它们的内容 . 当我再次单击第二个选项卡上的listItem然后导航回来时,会添加另外两个选项卡,然后它会一直打开 . 我怎么解决这个问题?这是代码

Tab B Fragment: public class 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();
                    }

                }
            });
}

}

Child fragment of B:

public class FragmentNearest扩展ListFragment {

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

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

}

1 回答

  • 0

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

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

相关问题