Up Navigation (freccia indietro della barra di azione) non funziona per i frammenti

Ho layout del cassetto come layout di base della mia attività e sto sostituendo due frammenti su un canvasio presente all'interno di questo layout del cassetto. Il primo frammento non viene aggiunto nella parte posteriore del frammento. Sto mostrando l'icona dell'hamburger nella mia attività (voglio anche il menu del cassetto nel mio primo frammento). Nel secondo frammento ho disabilitato l'icona dell'hamburger tramite il mActionBarDrawerToggle.setDrawerIndicatorEnabled(false) e abilitato indietro utilizzando actionBar.setDisplayHomeAsUpEnabled(true) .

Nei primi frammenti onResume ho triggersto l'icona dell'hamburger da mActionBarDrawerToggle.setDrawerIndicatorEnabled (true) `in modo che quando l'utente premere il button di ripristino (sia il button hardware che quello dell'azione di azione) dal secondo frammento, l'utente tornerà al primo frammento e l'icona dell'hamburger sarà abilitata . Tutto funziona bene solo non riesco a tornare indietro dal bottone d'azione del secondo frammento di azione. Non riesco a fare clic su di esso. Sotto è il mio codice: –

  • Immagini in ScrollView in android
  • NotificationManager.cancel (id) non funziona all'interno di un ricevitore broadcast
  • Come sapere se questo thread è una discussione UI
  • Come interagire FullScreen con Android VideoView
  • La mia applicazione è stata rifiutata dal gioco di Google a causa di un problema con la politica di networking?
  • Che cos'è il "requestCode" utilizzato per PendingIntent?
  • Codice attività

     if (Utility.isLargeScreen(this)) setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); else setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); mHiddenGemsApplication = (HiddenGemsApplication) getApplication(); super.onCreate(savedInstanceState); setContentView(R.layout.activity_home); initViews(); setSupportActionBar(mToolbar); ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.setDisplayShowTitleEnabled(false); actionBar.setDisplayHomeAsUpEnabled(true); } mTextViewActionBarTitle.setText(getString(R.string.app_name)); mActionBarDrawerToggle = new ActionBarDrawerToggle(HomeActivity.this, mDrawerLayout, mToolbar, R.string.open_drawer, R.string.close_drawer) { @Override public void onDrawerClosed(View drawerView) { super.onDrawerClosed(drawerView); } @Override public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); } }; mDrawerLayout.setDrawerListener(mActionBarDrawerToggle); mActionBarDrawerToggle.syncState(); mFragmentManager = getSupportFragmentManager(); replaceFragment(new CategoryFragment(), getString(R.string.app_name), CategoryFragment.TAG); @Override public void onBackPressed() { if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) { mDrawerLayout.closeDrawers(); return; } super.onBackPressed(); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: if (mFragmentManager.getBackStackEntryCount() > 0) { mFragmentManager.popBackStack(); } return true; default: return super.onOptionsItemSelected(item); } } public void replaceFragment(Fragment fragment, String actionBarTitle, String tag) { if (mFragmentManager == null) return; FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.content_frame, fragment, tag); if (!tag.equals(CategoryFragment.TAG)) fragmentTransaction.addToBackStack(tag); fragmentTransaction.commit(); setActionBarTitle(actionBarTitle); } public void setActionBarTitle(String actionBarTitle) { if (!TextUtils.isEmpty(actionBarTitle)) mTextViewActionBarTitle.setText(actionBarTitle); } public void setDrawerIndicatorEnabled(boolean value) { if (mActionBarDrawerToggle != null) { mActionBarDrawerToggle.setDrawerIndicatorEnabled(value); } } 

    Attività XML

     <?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:context="nirvaniclabs.com.hiddengems.activities.HomeActivity"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <include android:id="@+id/toolbarlayout" layout="@layout/toolbar_layout" /> <FrameLayout android:id="@+id/content_frame" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/toolbarlayout" /> </RelativeLayout> <android.support.design.widget.NavigationView android:id="@+id/navigation" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" app:menu="@menu/navigation_items" /> </android.support.v4.widget.DrawerLayout> 

    Primo frammento: –

      private Button mButtonTemp; private AppCompatActivity mActivity; public static String TAG = "CategoryFragment"; public CategoryFragment() { // Required empty public constructor } @Override public void onAttach(Context context) { super.onAttach(context); if (context instanceof Activity) mActivity = (AppCompatActivity) context; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View viewGroup = inflater.inflate(R.layout.fragment_category, container, false); initViews(viewGroup); mButtonTemp.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ((HomeActivity) mActivity).replaceFragment(new TripListFragment(), "Trip Fragment", TripListFragment.TAG); } }); return viewGroup; } private void initViews(View viewGroup) { mButtonTemp = (Button) viewGroup.findViewById(R.id.btn_temp); } @Override public void onResume() { super.onResume(); ((HomeActivity) mActivity).setDrawerIndicatorEnabled(true); ((HomeActivity) mActivity).setActionBarTitle(getString(R.string.app_name)); } 

    Secondo frammento

      private AppCompatActivity mActivity; public static String TAG = "TripListFragment"; public TripListFragment() { // Required empty public constructor } @Override public void onAttach(Context context) { super.onAttach(context); if (context instanceof Activity) mActivity = (AppCompatActivity) context; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); ActionBar actionBar = mActivity.getSupportActionBar(); if (actionBar != null) { actionBar.setDisplayShowTitleEnabled(false); actionBar.setDisplayHomeAsUpEnabled(true); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_trip_list, container, false); } @Override public void onResume() { super.onResume(); ((HomeActivity) mActivity).setDrawerIndicatorEnabled(false); } 

    Inoltre, quando sono in secondo frammento posso spostare e vedere il menu del cassetto. Non voglio questo comportmento, il menu del cassetto dovrebbe aprire solo nel frammento 1.

    Se qualche cosa è sbagliata nel codice mi prego di farmi sapere.

  • Perché findViewById () restituisce null se non viene chiamata setcontentview ()?
  • Codifica wav a AAC su Android
  • Il pollice di Android SeekBar viene tagliato / tagliato
  • URLEncoder codifica / decodifica URLDecoder in java (Android)
  • Android: differenza tra LocationManager.addProximityAlert () e LocationClient.addGeofences ()
  • Chiarimenti di implementazione WakefulIntentService
  • 2 Solutions collect form web for “Up Navigation (freccia indietro della barra di azione) non funziona per i frammenti”

    Alla fine ho ricevuto la risposta. Nel mio scenario disattivo l'indicatore del cassetto da mActionBarDrawerToggle.setDrawerIndicatorEnabled(false); e grazie a questa icona di navigazione i clic sono stati disabilitati. Per abilitare questo devo aggiungere ToolbarNavigationClickListener a ActionBarDrawerToggle che abiliterà i clic dell'icona di navigazione.

    Di seguito è il mio codice di lavoro:

     mActionBarDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onBackPressed(); } }); 

    Fare riferimento a questo link per ulteriori chiarimenti

    Dopo aver lottato con lo stesso problema per le età, ho finalmente riuscito a get il button Up per lavorare in frammenti con questo codice. È necessario impostare setHasOptionsMenu su onCreate () o onCreateView ()

     setHasOptionsMenu(true); 

    Quindi, in onOptionsItemSelected () aggiungere questo controllo per il button up / home premuto all'istruzione switch () [o se …]:

     @Override public boolean onOptionsItemSelected(MenuItem item) { xL(); switch (item.getItemId()) { case android.R.id.home : getActivity().onBackPressed(); break; case R.id.mn_exit : exitFragment(); break; default : break; } return super.onOptionsItemSelected(item); } 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.