Панель действий Кнопка «Назад» не работает
с помощью этих Android-документов. Я пытаюсь сделать панель действий. Кнопка «Назад». Я получаю кнопку «Назад», как показано ниже:
Вывод:
- Ящик навигации с поддержкой обратной совместимости
- Как отключить панель действий навсегда
- Как сместить ActionBar вместе с NavigationDrawer
- Элементы меню не отображаются на панели действий.
- Панель действий Android, не отображающая переполнение
Но моя проблема. После просмотра изображений в галерее я нажимаю кнопку 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; } }
Любой может помочь мне, если вы знаете, как их решить. Спасибо.
- Создание экрана предпочтений с поддержкой (v21) Панели инструментов
- Как изменить текст на панели действий
- Показать стрелку на панели инструментов
- Как изменить цвет заголовка панели действий в коде
- Android - кнопка переключения ActionBar Back на навигационную кнопку
- Как настроить кнопку «Назад» на ActionBar
- Как заставить панель действий быть внизу в ICS?
- Пользовательский прозрачный Android ActionBar
Я решил эту проблему, добавив ниже кодировку в 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 :
Ранее,
Открытый class HomeActivity расширяет BaseActivity
Затем я перехожу в
Открытый class 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()); }
Пожалуйста, прочтите это
вы должны иметь что-то вроде этого:
то вызов NavUtils.navigateUpFromSameTask (this) приведет к переходу к родительской активности (HomeActivity).
Попробуйте
Прежде всего вам нужно использовать addToBackStack()
перед commit()
для fragmentов
@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, но все же это сработало, поэтому я просто подумал, что оставлю это здесь для людей, которые сталкиваются с той же проблемой. Однако моя проблема связана с Управлением, а не с 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); }
Вот еще одна вещь, которую нужно проверить, если другие ответы здесь (или здесь или здесь или здесь ) не работают.
Я скопировал код из другого действия, которое отключило меню. Удаление этого метода (и применение решений, указанных в других ответах) позволило кнопке «вверх» работать.
@Override public boolean onCreateOptionsMenu(Menu menu) { // hide the menu return false; }
Вы просто должны добавить следующую строку в действие в manifest.xml. Родительская активность – это активность, к которой вы хотите вернуться.
android:parentActivityName=".activities.MainActivity"
Используйте метод SupportNavigateUp()
и вызовите onBackPressed
в этом методе.
В моем случае я переопределил метод onCreateOptionsMenu, и я забыл назвать супер в конце.