2016-08-11 1 views
1

Я использую PreferenceFragment, который я запускаю из NavigationDrawer. В предложении «Фрагмент» я покажу панель инструментов. Все выглядит хорошо, но когда я нажимаю стрелку на панели инструментов, чтобы вернуться, она не работает. Я вижу в этом журнале:Панель инструментов стрелка не работает в PreferenceFragment в NavigationDrawer

D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN 

Но ничего не делайте. Единственный способ вернуться - нажать кнопку обратно в устройство

Некоторая помощь будет оценена по достоинству.

Это мой код: PreferenceFragment:

public class AnPreferenceActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.pref_with_actionbar); 
     getFragmentManager().beginTransaction() 
       .replace(R.id.content_frame, new SettingsPreference()) 
       .commit(); 
    } 

    public static class SettingsPreference extends PreferenceFragment { 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      addPreferencesFromResource(R.xml.preferences); 
      Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar); 
      ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar); 
     } 
    } 
} 

Layout XML:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true"> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/appbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="?attr/colorPrimary" 
     android:minHeight="?attr/actionBarSize" 
     app:navigationContentDescription="@string/abc_action_bar_up_description" 
     app:navigationIcon="?attr/homeAsUpIndicator" 
     app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
     app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
     app:title="@string/action_settings" /> 
    </android.support.design.widget.AppBarLayout> 

    <FrameLayout 
     android:id="@+id/content_frame" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/appbar" /> 

</RelativeLayout> 
+0

Вы справились с обратным нажатием в пунктах меню? onOptionMenu при нажатии android.R.id.home вы должны ** backPressed() ** – Amir

+0

Привет, Амир, не уверен, что я вас понимаю. Я что-то новое в андроиде. Можете ли вы показать мне немного кода этого, пожалуйста? –

ответ

2

В onCreate() вашего фрагмента сначала вы должны объявить имеет опцию меню:

setHasOptionsMenu(true); 

Затем вы должны использовать свое собственное меню:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 

     case android.R.id.home: 
      // close fragment here 
      getActivity().getFragmentManager().popBackStack(); 
      return true; 
     default: 
      break; 
    } 
    return false; 
} 

Если вам нужно больше меню создать новый пункт меню:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.fragment_menu, menu); 
    return true; 
} 

Доступ к панели инструментов из фрагмента не хороший подход, вы должны справиться с этим в лучшую сторону. В этом вопросе есть много вопросов. (на самом деле Activity должно обрабатывать поведение панели)