我有一个ViewPagerContainer片段,在应用启动时加载。 ViewPagerContainer片段将两个选项卡(选项卡A和选项卡B)添加到操作栏。选项卡B有两个项目的列表视图。
我做了什么: 我将一个点击监听器附加到标签B片段中的列表视图项,这样当用户点击一个项目时,它会在第一个片段内打开另一个片段(子片段),即在标签B下。
我被卡住的地方: 当用户按下后退按钮时,我想返回标签B.我尝试通过将子片段添加到backstack来实现这一点,但遗憾的是它不会返回到tab B片段。请帮助我解决这个问题,我已经对此进行了大量研究,包括实施背包黑客并没有成功。
我使用的是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);
返回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的儿童片段:
public class 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);
}
答案 0 :(得分:0)
您应该像这样覆盖活动类中的onBackPressed方法。
@Override
public void onBackPressed()
{
if (iCanBackToFragment)
{
popBackStackOrWhateverYouUseToBack()
}
else
{
super.onBackPressed();
}
}