我有一个(相对)简单的向下钻取应用程序。
它有一个包含和转换片段的活动(MainActivity)。
public void goToPartnumbers(){
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left, R.anim.slide_in_right, R.anim.slide_out_left);
ft.replace(R.id.container, new IdentifierFragment()).addToBackStack("partnumber").commit();
}
IdentifierFragment
是一个标签布局la http://www.androidhive.info/2013/10/android-tab-layout-with-swipeable-views-1/
public class IdentifierFragment extends Fragment implements ActionBar.TabListener {
private ViewPager viewPager;
private FragmentStatePagerAdapter mAdapter;
private ActionBar actionBar;
private MainActivity mContext;
// Tab titles
private String[] tabs = { "Part Numbers", "OEM Numbers" };
public IdentifierFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.partnumber_list, container, false);
// Initialization
mContext = (MainActivity) getActivity();
viewPager = (ViewPager) view.findViewById(R.id.pager);
actionBar = mContext.getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
resetAdapter( new IdentifierFragmentAdapter(mContext.getSupportFragmentManager()) );
for (String tab_name : tabs) {
actionBar.addTab(actionBar.newTab().setText(tab_name)
.setTabListener(this));
}
...I can show you the rest but I don't think it's relevant
return view;
}
@Override
public void onDetach(){
super.onDetach();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
resetAdapter(null);
}
public void resetAdapter(FragmentStatePagerAdapter adapter){
actionBar.removeAllTabs();
viewPager.removeAllViews();
mAdapter = adapter;
viewPager.setAdapter(mAdapter);
}
...
}
两个子片段都是带有CursorLoaders的ListFragments。选择行后,将使用以下方法替换IdentifierFragment
:
public void goToGallery(){
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
galleryHandle = new GalleryFragment();
HashMap<String,String> selection = new HashMap<String, String>();
for (HashMap<? extends String, ? extends String> c : mCriteria){
selection.putAll(c);
}
galleryHandle.setSelection(selection);
ft.replace(R.id.container, galleryHandle).addToBackStack("gallery").commit();
}
当我进入IdentifierFragment
时,它运行正常。然后我可以选择一行并进入详细视图。当我尝试使用详细视图中的后退按钮时,我得到了ViewPager
,但没有ListViews
!
显然我可以提供其他所需的代码。我刚刚提供了我认为立即相关的内容。
我很茫然,非常想要任何帮助。提前谢谢!
答案 0 :(得分:0)
不是因为你替换了当前的片段。 也许如果你去一个新的画廊时使用.add()而不是.replace()
public void goToGallery(){
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
galleryHandle = new GalleryFragment();
HashMap<String,String> selection = new HashMap<String, String>();
for (HashMap<? extends String, ? extends String> c : mCriteria){
selection.putAll(c);
}
galleryHandle.setSelection(selection);
ft.add(R.id.container, galleryHandle).addToBackStack("gallery").commit();
}