2016-06-04 15 views
0

In meiner App habe ich jede Aktivität mit Schublade, aber wenn ich Schublade in meiner Preference-Aktivität einstellen, funktioniert meine Aktivität gut, aber Schublade nicht angezeigt.Wie man Navigationsfach in preferenceActivity setzen

hier ist mein Code ..

public class SettingActivity extends PreferenceActivity implements NavigationView.OnNavigationItemSelectedListener { 
private AppCompatDelegate mDelegate; 

private NavigationView mDrawer; 
private DrawerLayout mDrawerLayout; 
private ActionBarDrawerToggle mDrawerToggle; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    getDelegate().installViewFactory(); 
    getDelegate().onCreate(savedInstanceState); 

    getSupportActionBar().setDisplayShowHomeEnabled(true); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    super.onCreate(savedInstanceState); 

    if(savedInstanceState == null){ 
     android.app.Fragment infoFragment = new MyPreferenceFragment(); 
     FragmentTransaction ft = getFragmentManager().beginTransaction(); 
     ft.add(R.id.fragment_container, infoFragment); 
     ft.commit(); 
    } 

} 

public static class MyPreferenceFragment extends PreferenceFragment { 

    private AppSettings settings; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.pref); 
     Preference ringtonePrefs = findPreference("ringPref"); 
     ringtonePrefs.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { 
      @Override 
      public boolean onPreferenceChange(Preference preference, Object newValue) { 
       preference.setSummary(String.valueOf(newValue)); 
       return true; 
      } 
     }); 

     Preference mapTypePrefs = findPreference("mapPref"); 
     mapTypePrefs.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { 
      @Override 
      public boolean onPreferenceChange(Preference preference, Object newValue) { 
       preference.setSummary(String.valueOf(newValue)); 
       return true; 
      } 
     }); 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     settings = AppSettings.getSettings(getActivity()); 
     Preference ringtonPrefs = findPreference("ringPref"); 
     ringtonPrefs.setSummary(settings.getRingtone()); 

     Preference maptypePrefs = findPreference("mapPref"); 
     maptypePrefs.setSummary(settings.getMapType()); 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(sharedPrefsChangeListener); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(sharedPrefsChangeListener); 
    } 

    private final SharedPreferences.OnSharedPreferenceChangeListener sharedPrefsChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() { 
     @Override 
     public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 
      settings.load(); 
     } 
    }; 

} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    if (item.getItemId() == android.R.id.home) { 
     finish(); 
     return true; 
    } 
    return false; 
} 

@Override 
protected void onPostCreate(Bundle savedInstanceState) { 
    super.onPostCreate(savedInstanceState); 
    getDelegate().onPostCreate(savedInstanceState); 

} 

public android.support.v7.app.ActionBar getSupportActionBar() { 
    return getDelegate().getSupportActionBar(); 
} 

public void setSupportActionBar(@Nullable Toolbar toolbar) { 
    getDelegate().setSupportActionBar(toolbar); 
} 

@Override 
public MenuInflater getMenuInflater() { 
    return getDelegate().getMenuInflater(); 
} 

@Override 
public void setContentView(@LayoutRes int layoutResID) { 
    getDelegate().setContentView(layoutResID); 
} 

@Override 
public void setContentView(View view) { 
    getDelegate().setContentView(view); 
    setContentView(view, new DrawerLayout.LayoutParams(DrawerLayout.LayoutParams.MATCH_PARENT, DrawerLayout.LayoutParams.MATCH_PARENT)); 
} 

@Override 
public void setContentView(View view, ViewGroup.LayoutParams params) { 
    getDelegate().setContentView(view, params); 
    super.setContentView(R.layout.navigation_view); 

    setupDrawer(); 

    mDrawerLayout.addDrawerListener(mDrawerToggle); 
    mDrawerLayout.post(new Runnable() { 
     @Override 
     public void run() { 
      mDrawerToggle.syncState(); 
     } 
    }); 
} 

@Override 
public void addContentView(View view, ViewGroup.LayoutParams params) { 
    getDelegate().addContentView(view, params); 
} 

@Override 
protected void onPostResume() { 
    super.onPostResume(); 
    getDelegate().onPostResume(); 
} 

@Override 
protected void onTitleChanged(CharSequence title, int color) { 
    super.onTitleChanged(title, color); 
    getDelegate().setTitle(title); 
} 

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    getDelegate().onConfigurationChanged(newConfig); 
} 

@Override 
protected void onStop() { 
    super.onStop(); 
    getDelegate().onStop(); 
} 

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    getDelegate().onDestroy(); 
} 

public void invalidateOptionsMenu() { 
    getDelegate().invalidateOptionsMenu(); 
} 

private AppCompatDelegate getDelegate() { 
    if (mDelegate == null) { 
     mDelegate = AppCompatDelegate.create(this, null); 
    } 
    return mDelegate; 
} 

private void setupDrawer() { 
    assert getSupportActionBar() != null; 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    getSupportActionBar().setDisplayShowHomeEnabled(true); 
    mDrawer = (NavigationView) findViewById(R.id.mNavDrawer); 
    assert mDrawer != null; 
    mDrawer.setNavigationItemSelectedListener(this); 
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, 
      R.string.DrawerOpen, 
      R.string.DrawerClose){ 
     public void onDrawerClosed(View view) { 
      super.onDrawerClosed(view); 
      invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
     } 
     public void onDrawerOpened(View drawerView) { 
      super.onDrawerOpened(drawerView); 
      invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
     } 

    }; 

    mDrawerLayout.addDrawerListener(mDrawerToggle); 
    mDrawerToggle.syncState(); 
} 

@Override 
public boolean onNavigationItemSelected(MenuItem item) { 
    Intent intent = null; 
/* if (item.getItemId() == R.id.navigation_item_1) { 
     mDrawerLayout.closeDrawer(GravityCompat.START); 
     intent = new Intent(MapsActivity.this, LocationList.class); 
     intent.putExtra("longitude_key", longitude); 
     intent.putExtra("latitude_key", latitude); 
     intent.putExtra("place_name", placeName); 
     intent.putExtra("place_address", address); 
     startActivity(intent); 
     return true; 
    }*/ 
    if (item.getItemId() == R.id.navigation_item_2) { 
     mDrawerLayout.closeDrawer(GravityCompat.START); 
     intent = new Intent(this, AboutUs.class); 
     startActivity(intent); 
     return true; 
    } 
    if (item.getItemId() == R.id.navigation_item_3) { 
     mDrawerLayout.closeDrawer(GravityCompat.START); 
     intent = new Intent(this, Help.class); 
     startActivity(intent); 
     return true; 
    } 
    if(item.getItemId() == R.id.navigation_item_4){ 
     mDrawerLayout.closeDrawer(GravityCompat.START); 
     Intent i = new Intent(this, SettingActivity.class); 
     startActivity(i); 
     return true; 
    } 
    mDrawerLayout.closeDrawers(); 
    return true; 
} 

}

dies mein navigation_view.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" 
    android:id="@+id/drawer_layoutS" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <FrameLayout 
     android:id="@+id/fragment_container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"></FrameLayout> 

    <android.support.design.widget.NavigationView 
     android:id="@+id/mNavDrawerS" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     app:itemIconTint="@color/ColorAccent" 
     app:itemTextColor="@color/TextColor.DarkGray" 
     app:headerLayout="@layout/drawer_header" 
     app:menu="@menu/menu_drawer"/> 

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

ist mir bitte sagen, was hier im fehlt .. oder sagen Sie mir auf andere Weise es zu tun.

Antwort

2

Fügen Sie im niedrigsten hierarchischen Layout Ihrer Aktivität (standardmäßig content_main) ein FrameLayout mit dem Namen fragment_container hinzu. Legen Sie Breite und Höhe auf "Match_Parent" fest. Trick hier ist Ihr Fragment, da dies zu erstellen:

getFragmentManager() 
.beginTransaction()       
.replace(R.id.fragment_container, new MyFragment()) 
.commit(); 

Also man im Grunde nicht hinzufügen, um ein Fragment zu dem Bildschirm, Sie ersetzen nur eine vordefinierte Layout mit einem Fragmente. Dies verhindert Probleme bezüglich der Schublade und der Symbolleiste. Wenn nicht, lass es mich wissen, damit ich weiter nachforschen kann.

+0

bedeutet, dass ich mein Schubladenlayout übergeben muss, anstatt das Layout vordefinieren zu müssen. –

+0

Welches Layout verwenden Sie für Ihre PreferenceActivity? Standardmäßig sollte activity_main, app_bar_main und content_main lauten. –

+0

Ich benutze weder activity_main noch app_bar_main noch content_main –