安卓:用动作条和标签片段堆栈混乱 [英] Android: Fragment stack confusion with ActionBar and Tabs

查看:119
本文介绍了安卓:用动作条和标签片段堆栈混乱的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我工作的一个应用程序使用ActionBarSherlock导航选项卡和多个片段。

I'm working on an App utilizing ActionBarSherlock with navigation tabs and multiple fragments.

我的每一个或多个子意见三个导航标签。我也有一个或多个子意见三种期权的菜单项。一切正常,当我深入每个选项卡或选项菜单中的观点。每个初始子视图是一个ListFragment调用的详细视图或观点。

I have three navigation tabs each with one or more child views. I also have three option menu items with one or more child views. Everything works fine when I drill down the views within each Tab or option menu. Each initial subview is a ListFragment that calls a detail view or views.

我遇到问题的时候,我开始切换标签,而在子视图或选项菜单中的片段。我的观点开始新的视图下的previous视图重叠。

I run into problems when I start switching tabs while in the child views or the option menu fragment. My views start to overlap with the previous view underneath the new view.

下面是我的TabListener:

Here is my TabListener:

class MyTabsListener implements ActionBar.TabListener {
public SherlockListFragment fragment;

public MyTabsListener(SherlockListFragment fragment) {
    this.fragment = fragment;
}

public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
    ft.replace(android.R.id.content, fragment);
}

public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {      
    ft.remove(fragment);
}

public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
    // Don't care if a tab is reselected, no special handling required
}

下面是我的选择菜单:

   @Override
public boolean onOptionsItemSelected(MenuItem item) {

    // initialize variables
    FragmentManager fm = null;
    FragmentTransaction ft = null;
    ActionBar actionBar = getSupportActionBar();

    // check to see which action item was selected
    switch (item.getItemId()) {
    case android.R.id.home:
        // initialize variables
        fm = this.getSupportFragmentManager();
        ft = fm.beginTransaction();

        if (fm.getBackStackEntryCount() > 0) {

            fm.popBackStack();
            ft.commit();    
        }else {
            actionBar = getSupportActionBar();
            actionBar.setDisplayHomeAsUpEnabled(false);
        }   
        return true;
    case R.id.menuitem_search:
        onSearchRequested();
        return true;
    case R.id.menuitem_contacts:
        ContactListFragment contactListFragment = new ContactListFragment();    
        ft = getSupportFragmentManager().beginTransaction();
        ft.replace(android.R.id.content, contactListFragment);      
        ft.addToBackStack(null);
        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
        ft.commit();
        return true;
    case R.id.menuitem_isolation:
        ISOListFragment isoListFragment = new ISOListFragment();    
        ft = getSupportFragmentManager().beginTransaction();
        ft.replace(android.R.id.content, isoListFragment);      
        ft.addToBackStack(null);           
        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
        ft.commit();
        return true;
    case R.id.menuitem_water:
        H2OListFragment h2oListFragment = new H2OListFragment();    
        ft = getSupportFragmentManager().beginTransaction();
        ft.replace(android.R.id.content, h2oListFragment);      
        ft.addToBackStack(null);          
        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
        ft.commit();
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}

我有一个MainActivity所有片段。如何当有穿透孩子的观点和动作条导航标签处理您处理backstack?任何帮助或建议,将不胜AP preciated!在先进的感谢。

I have one MainActivity for all of the fragments. How do you handle the backstack when dealing with drill down child views and ActionBar navigation tabs?? Any help or suggestions would be greatly appreciated! Thanks in advanced.

推荐答案

下面是为我工作的解决方案:

Here is the solution that worked for me:

@Override
public void onBackPressed() {

    // initialize variables
    FragmentManager fm = getSupportFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();

    // check to see if stack is empty
    if (fm.getBackStackEntryCount() > 0) {          
        fm.popBackStack();
        ft.commit();    
    }
    else {

        super.onBackPressed();
    }
    return;
}

这篇关于安卓:用动作条和标签片段堆栈混乱的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆