2

Я создаю приложение, в котором я использую предпочтение Фрагмент с навигацией Ящик моя проблема, я создал навигацию Ящик и в котором я добавлен некоторый пункт меню, в котором я хочу загрузите фрагмент предпочтений в качестве первого элемента, когда приложение loads.it делает, как я не показываю. когда я меняю параметры Ie.when я меняю параметры меню ящика, как второй элемент, в меню кулачкового меню кулак не заменяется вторым, он перекрывает первый enter image description hereКак избежать фрагментов Перекрытие в android с помощью Drawer для навигации

мой навигатор xml is as следовать

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.koteswara.wise.NavigationDrawerMainActivity" > 

    <FrameLayout 
     android:id="@+id/container" 

     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
<LinearLayout 
     android:id="@+id/drawer" 
     android:layout_width="240dp" 
     android:layout_height="match_parent" 
     android:orientation="vertical" 
     android:layout_gravity="start" > 
<ListView 
    android:id="@+id/drawer_list" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@android:color/white" 
    android:choiceMode="singleChoice" 
    android:divider="@android:color/transparent" 
    android:dividerHeight="0dp" 
    tools:context="com.koteswara.wise.NavigationDrawerFragment" /> 
</LinearLayout> 

</android.support.v4.widget.DrawerLayout> 

мой фрагмент предпочтения, как этот

public class AutoAnswerPreferenceActivity extends PreferenceFragment implements OnSharedPreferenceChangeListener { 
    private AutoAnswerNotifier mNotifier; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.preference); 
     mNotifier = new AutoAnswerNotifier(getActivity()); 
     mNotifier.updateNotification(); 
     SharedPreferences sharedPreferences = getPreferenceManager().getSharedPreferences(); 
     sharedPreferences.registerOnSharedPreferenceChangeListener(this); 


     } 

    @Override 
    public void onDestroy() { 
     getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); 
     super.onDestroy(); 
     } 
    @Override 
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 
     if (key.equals("enabled")) { 
      mNotifier.updateNotification(); 
      } 
     } 

    } 

моего класса фрагмента, который добавляет к загрузке PreferenceFragment является

public class AutoAnswarFragment extends Fragment { 

    @Override 
    public void onCreate(@Nullable Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     getActivity().getFragmentManager().beginTransaction().replace(R.id.container, new AutoAnswerPreferenceActivity()) .commit(); 


    } 

класс навигации ящика, в котором показывает метод фрагмента

protected void showFragment(int position) { 
     // TODO Auto-generated method stub 
     Fragment fragment = null; 

     switch (position) { 
     case 0: 
      fragment = new AutoAnswarFragment(); 
      break; 
     case 1: 
      fragment = new Tab2(); 
      break; 
     case 2: 
      // fragment = new BhajanaFragment(); 
      break; 
     } 
     if (fragment != null) { 
      FragmentManager fragmentManager = getSupportFragmentManager(); 
      fragmentManager.beginTransaction() 
        .replace(R.id.container, fragment).commit(); 

      // update selected item and title, then close the drawer 
      // mDrawerList.setItemChecked(position, true); 
      // mDrawerList.setSelection(position); 
      mTitle = mDrawer_title[position]; 
      // mDrawerLayout.closeDrawer(mDrawerList); 
     } else { 
      // error in creating fragment 
      // Log.e("MainActivity", "Error in creating fragment"); 
     } 
    } 


} 

, если я буду называть фрагмент, кроме привилегированного фрагмента, как показано ниже будет работа, пожалуйста, помогите мне

public class Tab1 extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View v =inflater.inflate(R.layout.tab_1,container,false); 
     return v; 
    } 
} 

я пытаясь очистить решение для него, пожалуйста, любой орган решит его и, пожалуйста, скажите мне решение .i будет благодарно всем, пожалуйста, помогите мне

+0

im также отлично подходит для этого, но еще не получил. Но я сделал небольшой трюк, я просто поместил белый цвет фона в свой макет. задача решена. –

+0

Я использую структуру фрейма в xml, мне нужно сделать фон рамочной компоновки белым –

+0

да. Я сделал это и временно решил. но в реальности это не правильный путь. –

ответ

0

на таком человеке y дней исследований и поиска в Интернете я нашел решение, которое отлично работает для меня по вышеуказанной проблеме, есть ссылка в Интернете как http://www.michenux.net/android-preferencefragmentcompat-906.html. В этом я нашел образец apk и исходный код apk. поскольку этот apk имеет функциональность, поскольку он решает мою проблему. я очистил ошибки исходного кода, который появится при импорте, и после этого я добавил библиотеку в свой проект. Я использовал PreferenceCompatFragment, а не PreferenceFragmentCompat, он решил мою проблему, если кто-то нуждается в помощи, это может помочь им также, чтобы я опубликовал решение этой проблемы. и я благодарю всех, кто помог мне, кто и все дал какое-то ценное предложение для вышеупомянутой проблемы. Ниже класс ниже я использовал вместо PreferenceFragmentCompat библиотеки поддержки v7

public abstract class PreferenceCompatFragment extends Fragment { 

    private static final int FIRST_REQUEST_CODE = 100; 
    private static final int MSG_BIND_PREFERENCES = 1; 
    private static final String PREFERENCES_TAG = "android:preferences"; 
    private boolean mHavePrefs; 
    private boolean mInitDone; 
    private ListView mList; 
    private PreferenceManager mPreferenceManager; 

    private Handler mHandler = new Handler() { 
     @Override 
     public void handleMessage(Message msg) { 
      switch (msg.what) { 

       case MSG_BIND_PREFERENCES: 
        bindPreferences(); 
        break; 
      } 
     } 
    }; 

    final private Runnable mRequestFocus = new Runnable() { 
     public void run() { 
      mList.focusableViewAvailable(mList); 
     } 
    }; 

    private void bindPreferences() { 
     PreferenceScreen localPreferenceScreen = getPreferenceScreen(); 
     if (localPreferenceScreen != null) { 
      ListView localListView = getListView(); 
      localPreferenceScreen.bind(localListView); 
     } 
    } 

    private void ensureList() { 
     if (mList == null) { 
      View view = getView(); 
      if (view == null) { 
       throw new IllegalStateException("Content view not yet created"); 
      } 

      View listView = view.findViewById(android.R.id.list); 
      if (!(listView instanceof ListView)) { 
       throw new RuntimeException("Content has view with id attribute 'android.R.id.list' that is not a ListView class"); 
      } 

      mList = (ListView)listView; 
      if (mList == null) { 
       throw new RuntimeException("Your content must have a ListView whose id attribute is 'android.R.id.list'"); 
      } 

      mHandler.post(mRequestFocus); 
     } 
    } 

    private void postBindPreferences() { 
     if (mHandler.hasMessages(MSG_BIND_PREFERENCES)) { 
      mHandler.obtainMessage(MSG_BIND_PREFERENCES).sendToTarget(); 
     } 
    } 

    private void requirePreferenceManager() { 
     if (this.mPreferenceManager == null) { 
      throw new RuntimeException("This should be called after super.onCreate."); 
     } 
    } 

    public void addPreferencesFromIntent(Intent intent) { 
     requirePreferenceManager(); 
     PreferenceScreen screen = inflateFromIntent(intent, getPreferenceScreen()); 
     setPreferenceScreen(screen); 
    } 

    public void addPreferencesFromResource(int resId) { 
     requirePreferenceManager(); 
     PreferenceScreen screen = inflateFromResource(getActivity(), resId, getPreferenceScreen()); 
     setPreferenceScreen(screen); 
    } 

    public Preference findPreference(CharSequence key) { 
     if (mPreferenceManager == null) { 
      return null; 
     } 
     return mPreferenceManager.findPreference(key); 
    } 

    public ListView getListView() { 
     ensureList(); 
     return mList; 
    } 

    public PreferenceManager getPreferenceManager() { 
     return mPreferenceManager; 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     getListView().setScrollBarStyle(0); 
     if (mHavePrefs) { 
      bindPreferences(); 
     } 
     mInitDone = true; 
     if (savedInstanceState != null) { 
      Bundle localBundle = savedInstanceState.getBundle(PREFERENCES_TAG); 
      if (localBundle != null) { 
       PreferenceScreen screen = getPreferenceScreen(); 
       if (screen != null) { 
        screen.restoreHierarchyState(localBundle); 
       } 
      } 
     } 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     dispatchActivityResult(requestCode, resultCode, data); 
    } 

    @Override 
    public void onCreate(Bundle paramBundle) { 
     super.onCreate(paramBundle); 
     mPreferenceManager = createPreferenceManager(); 
    } 

    @Override 
    public View onCreateView(LayoutInflater paramLayoutInflater, ViewGroup paramViewGroup, Bundle paramBundle) { 
     return paramLayoutInflater.inflate(R.layout.preference_list_content, paramViewGroup, false); 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     dispatchActivityDestroy(); 
    } 

    @Override 
    public void onDestroyView() { 
     mList = null; 
     mHandler.removeCallbacks(mRequestFocus); 
     mHandler.removeMessages(MSG_BIND_PREFERENCES); 
     super.onDestroyView(); 
    } 

    @Override 
    public void onSaveInstanceState(Bundle bundle) { 
     super.onSaveInstanceState(bundle); 
     PreferenceScreen screen = getPreferenceScreen(); 
     if (screen != null) { 
      Bundle localBundle = new Bundle(); 
      screen.saveHierarchyState(localBundle); 
      bundle.putBundle(PREFERENCES_TAG, localBundle); 
     } 
    } 

    @Override 
    public void onStop() { 
     super.onStop(); 
     dispatchActivityStop(); 
    } 

    /** Access methods with visibility private **/ 

    private PreferenceManager createPreferenceManager() { 
     try { 
      Constructor<PreferenceManager> c = PreferenceManager.class.getDeclaredConstructor(Activity.class, int.class); 
      c.setAccessible(true); 
      return c.newInstance(this.getActivity(), FIRST_REQUEST_CODE); 
     } catch (Exception e) { 
      throw new RuntimeException(e); 
     } 
    } 

    private PreferenceScreen getPreferenceScreen() { 
     try { 
      Method m = PreferenceManager.class.getDeclaredMethod("getPreferenceScreen"); 
      m.setAccessible(true); 
      return (PreferenceScreen) m.invoke(mPreferenceManager); 
     } catch (Exception e) { 
      throw new RuntimeException(e); 
     } 
    } 

    private void setPreferenceScreen(PreferenceScreen preferenceScreen) { 
     try { 
      Method m = PreferenceManager.class.getDeclaredMethod("setPreferences", PreferenceScreen.class); 
      m.setAccessible(true); 
      boolean result = (Boolean) m.invoke(mPreferenceManager, preferenceScreen); 
      if (result && preferenceScreen != null) { 
       mHavePrefs = true; 
       if (mInitDone) { 
        postBindPreferences(); 
       } 
      } 
     } catch (Exception e) { 
      throw new RuntimeException(e); 
     } 
    } 

    private void dispatchActivityResult(int requestCode, int resultCode, Intent data) { 
     try { 
      Method m = PreferenceManager.class.getDeclaredMethod("dispatchActivityResult", int.class, int.class, Intent.class); 
      m.setAccessible(true); 
      m.invoke(mPreferenceManager, requestCode, resultCode, data); 
     } catch (Exception e) { 
      throw new RuntimeException(e); 
     } 
    } 

    private void dispatchActivityDestroy() { 
     try { 
      Method m = PreferenceManager.class.getDeclaredMethod("dispatchActivityDestroy"); 
      m.setAccessible(true); 
      m.invoke(mPreferenceManager); 
     } catch (Exception e) { 
      throw new RuntimeException(e); 
     } 
    } 

    private void dispatchActivityStop() { 
     try { 
      Method m = PreferenceManager.class.getDeclaredMethod("dispatchActivityStop"); 
      m.setAccessible(true); 
      m.invoke(mPreferenceManager); 
     } catch (Exception e) { 
      throw new RuntimeException(e); 
     } 
    } 


    private void setFragment(PreferenceFragment preferenceFragment) { 
     try { 
      Method m = PreferenceManager.class.getDeclaredMethod("setFragment", PreferenceFragment.class); 
      m.setAccessible(true); 
      m.invoke(mPreferenceManager, preferenceFragment); 
     } catch (Exception e) { 
      throw new RuntimeException(e); 
     } 
    } 

    public PreferenceScreen inflateFromResource(Context context, int resId, PreferenceScreen rootPreferences) { 
     PreferenceScreen preferenceScreen ; 
     try { 
      Method m = PreferenceManager.class.getDeclaredMethod("inflateFromResource", Context.class, int.class, PreferenceScreen.class); 
      m.setAccessible(true); 
      preferenceScreen = (PreferenceScreen) m.invoke(mPreferenceManager, context, resId, rootPreferences); 
     } catch (Exception e) { 
      throw new RuntimeException(e); 
     } 
     return preferenceScreen; 
    } 

    public PreferenceScreen inflateFromIntent(Intent queryIntent, PreferenceScreen rootPreferences) { 
     PreferenceScreen preferenceScreen ; 
     try { 
      Method m = PreferenceManager.class.getDeclaredMethod("inflateFromIntent", Intent.class, PreferenceScreen.class); 
      m.setAccessible(true); 
      preferenceScreen = (PreferenceScreen) m.invoke(mPreferenceManager, queryIntent, rootPreferences); 
     } catch (Exception e) { 
      throw new RuntimeException(e); 
     } 
     return preferenceScreen; 
    } 
} 
0

Убедитесь, что корень расположение всех фрагментов, имеющих

андроид: фон = «@ цвет/your_favorite_color»

Таким образом они будут скрывать другие фрагменты внизу.