操作栏后退button不起作用

与这些Android文档的帮助。我正在尝试做一个操作栏后退button。我得到一个操作栏后退button,如下图所示:

在这里输入图像说明

输出:

但我的问题是在观看图库图像后,我按下了action bar back button

然后it is not working但它必须go back to previous page

下面列出的是编码。

GalleryActivity.java:

  import android.app.ActionBar; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.app.NavUtils; import android.view.MenuItem; import com.fth.android.R; public class GalleryActivity extends FragmentActivity { private int position; private static String id; private static String name; private DemoCollectionPagerAdapter mDemoCollectionPagerAdapter; private ViewPager mViewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_gallery); position = getIntent().getExtras().getInt("position"); id = getIntent().getExtras().getString("id"); name = getIntent().getExtras().getString("name"); mDemoCollectionPagerAdapter = new DemoCollectionPagerAdapter(getSupportFragmentManager()); // Set up action bar. final ActionBar actionBar = getActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); // getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME|ActionBar.DISPLAY_USE_LOGO|ActionBar.DISPLAY_HOME_AS_UP); // Set up the ViewPager, attaching the adapter. mViewPager = (ViewPager) findViewById(R.id.pager); mViewPager.setAdapter(mDemoCollectionPagerAdapter); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: Intent upIntent = new Intent(this, HomeActivity.class); upIntent.putExtra("position", position); if (NavUtils.shouldUpRecreateTask(this, upIntent)) { TaskStackBuilder.from(this) .addNextIntent(upIntent) .startActivities(); finish(); } else { NavUtils.navigateUpTo(this, upIntent); } return true; } return super.onOptionsItemSelected(item); } } 

GalleryDetailFragment.java:

 import com.sit.fth.model.GalleryDetail; import com.sit.fth.util.APIServiceHandler; import com.sit.fth.util.AppConstants; import com.sit.fth.util.AppPromoPager; public class GalleryDetailFragment extends BaseFragment implements PromoPagerListener { private TextView countView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { this.setHasOptionsMenu(true); id = getArguments().getString("id"); name = getArguments().getString("name"); View view = inflater.inflate(R.layout.app_pager, null); return view; } } 

如果你知道如何解决这些问题,任何人都可以帮助我。谢谢。

我通过在GalleryActivity添加下面的代码来解决这些问题。

 ActionBar actionBar; actionBar=getActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: onBackPressed(); return true; } return super.onOptionsItemSelected(item); } 

MainActivity中

先前,

公共类HomeActivity扩展BaseActivity

然后我换成

公共类HomeActivity扩展FragmentActivity

GalleryFragment中:

我使用Intent传递给GalleryActivity

 @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { Gallery gallery = (Gallery) arg0.getAdapter().getItem(arg2); Intent intent = new Intent(getActivity(), GalleryActivity.class); intent.putExtra("position", position); intent.putExtra("id", gallery.getGalId()); intent.putExtra("name", gallery.getAlbumTitle()); startActivity(intent); // mCallback.OnGalItemSelected(gallery.getGalId(),gallery.getAlbumTitle()); } 

请阅读

你应该有这样的东西:

  <activity android:name="com.sit.fth.activity.HomeActivity" android:screenOrientation="portrait"> </activity> <activity android:name="com.sit.fth.activity.GalleryActivity" android:screenOrientation="portrait" android:parentActivityName="com.sit.fth.activity.HomeActivity"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.sit.fth.activity.HomeActivity"/> </activity> 

然后调用NavUtils.navigateUpFromSameTask(this)将导致导航到父活动(HomeActivity)。

尝试像

首先你需要在commit()之前使用addToBackStack() commit()作为Fragments

 @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { // Respond to the action bar's Up/Home button case android.R.id.home: if(getSupportFragmentManager().getBackStackEntryCount()>0) getSupportFragmentManager().popBackStack(); return true; } return super.onOptionsItemSelected(item); } 

这里提供的答案都没有为我工作。 我不得不把switch放在onMenuItemSelected方法中。 我意识到这不是在Android文档中所陈述的,但仍然有效,所以我只是觉得我会把这个留给那些遇到同样问题的人。 我的问题涉及一个Activity而不是一个Fragment ,但这应该是几乎相同的。

 class FooActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // ... getActionBar().setHomeButtonEnabled(true); getActionBar().setDisplayHomeAsUpEnabled(true); } @Override public boolean onMenuItemSelected(int featureId, MenuItem item) { switch (item.getItemId()) { case android.R.id.home: NavUtils.navigateUpFromSameTask(this); return true; } return false; } } 

对我来说,我不得不将mDrawerToggle.setToolbarNavigationClickListener(...)设置为触发后退动作的侦听器。 否则,它什么都不做。 这是ActionBarDrawerToggle的源代码的样子:

 toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mDrawerIndicatorEnabled) { toggle(); } else if (mToolbarNavigationClickListener != null) { mToolbarNavigationClickListener.onClick(v); } } }); 

所以默认行为实际上是调用我们的监听器,而不是自己做任何魔术。

的onCreate

 { ... Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); resetActionBar(); ... } public void resetActionBar() { getSupportActionBar().setDisplayShowHomeEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); } @Override public void onBackPressed() { FragmentManager fm = getSupportFragmentManager(); int count = fm.getBackStackEntryCount(); if(count == 0) { // Do you want to close app? showDialog(); }else{ super.onBackPressed(); } } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); Log.i("coming", "comming"); //noinspection SimplifiableIfStatement if(id==android.R.id.home){ if (getSupportFragmentManager().getBackStackEntryCount() > 0) onBackPressed(); else drawerLayout.openDrawer(navigationView); return true; } return super.onOptionsItemSelected(item); } 

这里还有一件事要检查,以防其他答案在这里(或在这里或这里或这里 )不起作用。

我从另一个禁用菜单的活动复制了一些代码。 删除此方法(并应用其他答案中给出的解决scheme)允许向上button工作。

 @Override public boolean onCreateOptionsMenu(Menu menu) { // hide the menu return false; }