如何使用 FragmentTransaction 的函数"addToBackStack(String string)"



我想在我的应用程序中遵守Tab。因此,我使用了一个TabHost(在三个片段中)。在第二个或第三个选项卡中,当我点击手机上的"返回"按钮时,我想转到第一个选项卡,而不是破坏Acticity。

"addToBackStack(String-temp)"是否可以在"onBackPressed"。

下面是我的代码。ps:这是我的第一个问题。对不起,我的英语很差。

package in.wptrafficanalyzer.navigationtabdemo;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.widget.TabHost;
public class MainActivity extends Activity{
private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;
private TabHost tHost;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    tHost = (TabHost) findViewById(R.id.tabhost1);
    tHost.setup();
    TabHost.OnTabChangeListener tabChangeListener = new TabHost.OnTabChangeListener() 
    {
        @Override
        public void onTabChanged(String tabId) 
        {
            FragmentManager fm = getFragmentManager();
            Fragment androidFragment = fm.findFragmentByTag("android");
            Fragment appleFragment = fm.findFragmentByTag("apple");
            Fragment wpFragment = fm.findFragmentByTag("wp");
            FragmentTransaction ft = fm.beginTransaction();
            if(androidFragment!=null)
                ft.detach(androidFragment);
            if(appleFragment!=null)
                ft.detach(appleFragment);
            if(wpFragment != null)
                ft.detach(wpFragment);
            /** If current tab is android */
            if(tabId.equalsIgnoreCase("tabAndroid"))
            {
                if(androidFragment==null)       
                    /** Create AndroidFragment and adding to fragmenttransaction */
                    ft.replace(R.id.realtabcontent, new AndroidFragment(), "android");
                else
                    /** Bring to the front, if already exists in the fragmenttransaction */
                    ft.attach(androidFragment);
                if(fm.getBackStackEntryCount() == 0)
                {
                    ft.addToBackStack(null);
                }
            }
            else if(tabId.equalsIgnoreCase("tabApple")) 
            {
                /** If current tab is apple */
                if(appleFragment==null)
                    /** Create AppleFragment and adding to fragmenttransaction */
                    ft.replace(R.id.realtabcontent,new AppleFragment(), "apple");                       
                else
                    /** Bring to the front, if already exists in the fragmenttransaction */
                    ft.attach(appleFragment);   
            }
            else
                if(wpFragment==null)
                    ft.replace(R.id.realtabcontent,new WPFragment(), "wp");
                else
                    ft.attach(wpFragment);
            ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
            ft.commit();                
        }
    };
    /** Setting tabchangelistener for the tab */
    tHost.setOnTabChangedListener(tabChangeListener);
    /** Defining tab builder for Andriod tab */
    TabHost.TabSpec tSpecAndroid = tHost.newTabSpec("tabAndroid");
    tSpecAndroid.setIndicator("Android",null);        
    tSpecAndroid.setContent(new DummyTabContent(getBaseContext()));
    tHost.addTab(tSpecAndroid);
    /** Defining tab builder for Apple tab */
    TabHost.TabSpec tSpecApple = tHost.newTabSpec("tabApple");
    tSpecApple.setIndicator("Apple",null);        
    tSpecApple.setContent(new DummyTabContent(getBaseContext()));
    tHost.addTab(tSpecApple);
    TabHost.TabSpec tSpecWp = tHost.newTabSpec("tabWp");
    tSpecWp.setIndicator("Wp",null);        
    tSpecWp.setContent(new DummyTabContent(getBaseContext()));
    tHost.addTab(tSpecWp);
 }
}

您可以这样做:

@Override
        public void onBackPressed() {
            // TODO Auto-generated method stub


        if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
                    fragmentManager.popBackStack(null,
                                FragmentManager.POP_BACK_STACK_INCLUSIVE);
                }
        else{
        super.onBackPressed();
        }
        }

如果堆栈不是空的,它会检查返回按钮,使其为空,如果为空,则退出

最新更新