1

ナビゲーションタブと複数のフラグメントを備えたActionBarSherlockを利用するアプリに取り組んでいます。

3つのナビゲーションタブがあり、それぞれに1つ以上の子ビューがあります。また、1つ以上の子ビューを持つ3つのオプションメニュー項目があります。各タブまたはオプションメニュー内のビューをドリルダウンすると、すべてが正常に機能します。各初期サブビューは、1つまたは複数の詳細ビューを呼び出すListFragmentです。

子ビューまたはオプションメニューフラグメントでタブの切り替えを開始すると、問題が発生します。私のビューは、新しいビューの下にある前のビューと重なり始めます。

これが私の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);
    }
}

すべてのフラグメントに対して1つのMainActivityがあります。子ビューとActionBarナビゲーションタブのドリルダウンを処理するときに、バックスタックをどのように処理しますか?どんな助けや提案も大歓迎です!

4

1 に答える 1

1

これが私のために働いた解決策です:

@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;
}
于 2012-08-23T13:59:19.870 に答える