我已经实现了一个带有可滑动视图的选项卡布局,它有5个选项卡。在我的前四个选项卡中,我加载了网格菜单。如果我在网格中选择其中一项,它将打开一个新的活动。
在我的manifest.xml文件中,我使用这一行将其导航回来。
android:parentActivityName="xxxxxxx.ActivityMenuGrid"当我在第二个、第三个或第四个选项卡中选择一个项目并按下屏幕左上角的后退导航按钮时,它将返回并打开并显示第一个选项卡,而不是我选择所需项目的选项卡。但是,如果我按下手机上的后退按钮,它会将我导航回打开新活动的选项卡。如何将左上角的后退导航导航到相应的选项卡。
public class ActivityMenuGrid extends FragmentActivity implements
ActionBar.TabListener {
private ViewPager viewPager;
private TabsPagerAdapter mAdapter;
private ActionBar actionBar;
public TabHost myTabHost;
// Tab titles
private String[] tabs = { "", "", "", "", "" };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);
// Initilization
viewPager = (ViewPager) findViewById(R.id.pager);
actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(false);
actionBar.setDisplayShowHomeEnabled(false);
actionBar.setDisplayShowTitleEnabled(true);
actionBar.setDisplayUseLogoEnabled(true);
actionBar.addTab(actionBar.newTab().setTabListener(this)
.setIcon(R.drawable.ic_tab_p));
actionBar.addTab(actionBar.newTab().setTabListener(this)
.setIcon(R.drawable.ic_tab_n));
actionBar.addTab(actionBar.newTab().setTabListener(this)
.setIcon(R.drawable.ic_tab_s));
actionBar.addTab(actionBar.newTab().setTabListener(this)
.setIcon(R.drawable.ic_tab_pr));
actionBar.addTab(actionBar.newTab().setTabListener(this)
.setIcon(R.drawable.ic_tab_pro);
ActionBar bar = getActionBar();
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// set background for action bar tab
bar.setStackedBackgroundDrawable(new ColorDrawable(Color
.parseColor("#f8f8f8")));
bar.show();
viewPager.setAdapter(mAdapter);
actionBar.setHomeButtonEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
/**
* on swiping the viewpager make respective tab selected
* */
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
}
public void onBackPressed() {
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.activity_main_actions, menu);
// Associate searchable configuration with the SearchView
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Take appropriate action for each action item click
switch (item.getItemId()) {
case R.id.action_search:
// search action
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// getActionBar().setTitle(tab.getText());
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
}
}我正在从tab2中选择一个项目,

然后,它将开启新的活动。而且它有后退导航按钮。

当我按下后退导航按钮时,它会返回到tab1,而不是tab 2。我想解决这个问题并导航到tab2。仅供参考-当我按下电话中的后退导航硬件按钮时,它会导航到选项卡2。
任何帮助都将受到高度的感谢。
发布于 2015-02-12 20:03:18
你必须重写activitys的onBackPresed函数,并且必须写入逻辑才能移动到“所需的选项卡”。这样做会阻止你的应用程序用安卓硬件的后退按钮关闭(按下后退按钮时的默认导航),而且你必须检查你是否已经在所需的选项卡中,并将事件super.onBackPressed();传递给操作系统以关闭应用程序或处理默认导航。
发布于 2015-02-12 20:41:47
下面的代码指出,当你按下back按钮时,它正在启动新的activity,并且你不会用它覆盖that.Check一次。
@Override - > Missing.
public void onBackPressed() {
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
}我会建议一次编辑,尝试在onPageSelected方法中设置标签的位置,当按下后按时,检查它之前的位置,并导航到它。例如:
static int pos =0;
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
pos=position;
}
@Override
public void onBackPressed() {
try {
switch (pos) {
case 0: // Means Main Activity : Do Default action
super.onBackPressed();
break;
case 1:
case 2:
case 3://Other than main tab open previous positioned tab.
viewPager.setCurrentItem(pos, true);
break;
}
} catch (Exception e) {
super.onBackPressed();
}
}我也有同样的问题,如果我能帮助你,它也适用于me.Glad。
发布于 2015-02-13 20:39:52
我能够做到这一点,通过做,
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Take appropriate action for each action item click
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
return true;
default:
return super.onOptionsItemSelected(item);
}
}https://stackoverflow.com/questions/28476476
复制相似问题