Ich habe eine Notes App, mit der ich zwei Arten von Ansichten implementiert habe: Listen- und Rasteransichten. Ein Benutzer kann je nach seiner Wahl zwischen listView
und gridView
wechseln. Das Problem, das ich habe, ist, dass ich versucht habe, den Zustand der Ansicht dauerhaft zu speichern, so dass die ausgewählte Ansicht beim Start geöffnet wird. Ich versuche, SharedPreferences
zu verwenden, um dies zu erreichen. Was mache ich falsch in meinem Code?Daten persistent speichern
private static final String KEY_NAME = "viewState";
private ListView mListNotes;
private GridView mGridNotes;
SharedPreferences sharedPreferences;
SharedPreferences.Editor editor;
private boolean mViewIsChanged = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// set the layouts for list/grid
mListNotes = (ListView) findViewById(R.id.main_listview);
mGridNotes = (GridView) findViewById(R.id.main_gridview);
// Retrieve value from Shared Preferences.
sharedPreferences = getPreferences(Context.MODE_PRIVATE);
mViewIsChanged = sharedPreferences.getBoolean(KEY_NAME, false);
if (!mViewIsChanged){
mListNotes.setVisibility(View.VISIBLE);
mGridNotes.setVisibility(View.GONE);}
else {
mListNotes.setVisibility(View.GONE);
mGridNotes.setVisibility(View.VISIBLE);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View customTitleView = inflater.inflate(R.layout.dialog_menu, null);
LinearLayout mListViewSelect = (LinearLayout) customTitleView.findViewById(R.id.list_select);
LinearLayout mGridViewSelect = (LinearLayout) customTitleView.findViewById(R.id.grid_select);
switch (item.getItemId()) {
case R.id.addItem:
// start NoteActivity
startActivity(new Intent(this, NoteActivity.class));
break;
case R.id.changeView:
final AlertDialog alertbox = new AlertDialog.Builder(this).create();
alertbox.setCancelable(true);
alertbox.setView(customTitleView);
alertbox.show();
mListViewSelect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Saving Data
sharedPreferences = getPreferences(Context.MODE_PRIVATE);
editor = sharedPreferences.edit();
editor.putBoolean(KEY_NAME, mViewIsChanged);
editor.apply();
mListNotes.setVisibility(View.VISIBLE);
mGridNotes.setVisibility(View.GONE);
alertbox.dismiss();
}
});
mGridViewSelect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// saving Data in SharedPreferences
mViewIsChanged = true;
sharedPreferences = getPreferences(Context.MODE_PRIVATE);
editor = sharedPreferences.edit();
editor.putBoolean(KEY_NAME, mViewIsChanged);
editor.apply();
mListNotes.setVisibility(View.GONE);
mGridNotes.setVisibility(View.VISIBLE);
alertbox.dismiss();
}
});
Sie rufen die Werte aus der gemeinsamen Einstellung richtig ab, aber wo verwenden Sie diesen Wert zum Überprüfen und Laden der Ansichten? Ich sehe keine Implementierung in Ihrem Code. –
ich mache das in meinem onOptionsItemSelected. überprüfe meinen aktualisierten Code. oder mache ich es falsch – Benfight
Sie speichern und retreiving Daten. Dass du es richtig machst. Aber basierend auf den abgerufenen Daten müssen Sie die Bedingung in der onCreate-Methode hinzufügen. Wenn shared preference false ist, dann lade die Listenansicht und wenn die Rasteransicht korrekt geladen wird, gab –