Tabs中的Android ListFragment没有显示在后退按钮返回

时间:2014-06-10 00:54:27

标签: android android-fragments

我有一个(相对)简单的向下钻取应用程序。

它有一个包含和转换片段的活动(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

显然我可以提供其他所需的代码。我刚刚提供了我认为立即相关的内容。

我很茫然,非常想要任何帮助。提前谢谢!

1 个答案:

答案 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();
}