我想在我的应用程序中遵守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();
}
}
如果堆栈不是空的,它会检查返回按钮,使其为空,如果为空,则退出