N
no1Ltan
Fortgeschrittenes Mitglied
- 7
Hallo,
ich stehe in meiner App vor einem Problem und möchte dieses mithilfe einer kleinen Test-App besser demonstrieren.
Kurze Erläuterung zur Funktionsweise der Test-App:
- 2 Radio-Buttons, die beim Klick entweder die String-Variable namens mode auf "A" oder "B" setzen
- 1 TextView, die beim Klick einen Zahlenwert addiert
- ist der Modus B -> Zahlenwert um 2 erhöhen
- ansonsten -> Zahlenwert um 1 erhöhen.
Es funktioniert an sich einwandfrei (bis auf dass die TextView sich beim Drehen nicht aktualisiert - aber das ist nicht relevant.)
Die Werte werden alle gespeichert und wenn ich die App neu starte, ist der RadioButton gecheckt und dessen Wert ("A" oder "B")
wird automatisch ermittelt - zeigt auch die Log.
Allerdings funktioniert die if-Abfrage nicht.
Obwohl mode den Wert "B" hat, läuft trotzdem die else durch.
Ich muss also nochmals auf den bereits gecheckten RadioButton B klicken, damit mode dann auch tatsächlich den Wert "B" hat.
Theoretisch müsste ich die String-Variable mode nicht deklarieren, sondern mit dem Wert aus der SharedPreferences initialisieren.
Aber wie soll das gehen?
MainActivity.java
Danke für jede Hilfe.
P.S. Aber selbst wenn ich mit String mode = "B"; initialisiere, funktioniert es nicht!
Grüße
ich stehe in meiner App vor einem Problem und möchte dieses mithilfe einer kleinen Test-App besser demonstrieren.
Kurze Erläuterung zur Funktionsweise der Test-App:
- 2 Radio-Buttons, die beim Klick entweder die String-Variable namens mode auf "A" oder "B" setzen
- 1 TextView, die beim Klick einen Zahlenwert addiert
- ist der Modus B -> Zahlenwert um 2 erhöhen
- ansonsten -> Zahlenwert um 1 erhöhen.
Es funktioniert an sich einwandfrei (bis auf dass die TextView sich beim Drehen nicht aktualisiert - aber das ist nicht relevant.)
Die Werte werden alle gespeichert und wenn ich die App neu starte, ist der RadioButton gecheckt und dessen Wert ("A" oder "B")
wird automatisch ermittelt - zeigt auch die Log.
Allerdings funktioniert die if-Abfrage nicht.
Obwohl mode den Wert "B" hat, läuft trotzdem die else durch.
Ich muss also nochmals auf den bereits gecheckten RadioButton B klicken, damit mode dann auch tatsächlich den Wert "B" hat.
Theoretisch müsste ich die String-Variable mode nicht deklarieren, sondern mit dem Wert aus der SharedPreferences initialisieren.
Aber wie soll das gehen?
MainActivity.java
Code:
import android.content.Context;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity
{
int points = 0; // Gets shown in textViewPoints
String mode; // Can be A or B
private static final String STATE_POINTS = "state_points";
private static final String STATE_MODE = "state_mode";
RadioGroup radioGroup;
final String KEY_SAVED_RADIO_BUTTON_INDEX = "SAVED_RADIO_BUTTON_INDEX";
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView textViewPoints = findViewById(R.id.text_view_points); // Link variable to ID
RadioButton radioButtonSingle = findViewById(R.id.radio_button_single); // Link variable to ID
RadioButton radioButtonDouble = findViewById(R.id.radio_button_double); // Link variable to ID
SharedPreferences prefs = getSharedPreferences("MY_SHARED_PREF", Context.MODE_PRIVATE); // Load SharedPreferences file
mode = prefs.getString("mode", mode); // Load saved mode (A or B)
int savedRadioIndex = prefs.getInt(KEY_SAVED_RADIO_BUTTON_INDEX, 0);
Log.wtf("loaded mode:", mode); // Log is successful!
radioGroup = findViewById(R.id.radio_group);
radioGroup.setOnCheckedChangeListener(radioGroupOnCheckedChangeListener);
textViewPoints.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
if (mode == "B") // If mode B was chosen:
{
points = points + 2; // Increment points by 2
}
else // Otherwise:
{
points++; // Increment points by 1
}
String pointsString = Integer.toString(points); // Convert int to string
textViewPoints.setText(pointsString); // Update textViewPoints
}
});
RadioButton savedCheckedRadioButton = (RadioButton) radioGroup.getChildAt(savedRadioIndex);
savedCheckedRadioButton.setChecked(true);
radioButtonSingle.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
setMode("A"); // Write mode A in SharedPreferences
mode = "A";
}
});
radioButtonDouble.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
setMode("B"); // Write mode B in SharedPreferences
mode = "B";
}
});
}
RadioGroup.OnCheckedChangeListener radioGroupOnCheckedChangeListener =
new RadioGroup.OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(RadioGroup group, int checkedId)
{
RadioButton checkedRadioButton = radioGroup.findViewById(checkedId);
int checkedIndex = radioGroup.indexOfChild(checkedRadioButton);
savePreferences(KEY_SAVED_RADIO_BUTTON_INDEX, checkedIndex);
}
};
@Override
protected void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
outState.putInt(STATE_POINTS, points);
outState.putString(STATE_MODE, mode);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState)
{
super.onRestoreInstanceState(savedInstanceState);
points = savedInstanceState.getInt(STATE_POINTS);
mode = savedInstanceState.getString(STATE_MODE);
}
public void savePreferences(String key, int value)
{
SharedPreferences prefs = getSharedPreferences("MY_SHARED_PREF", Context.MODE_MULTI_PROCESS); // Create new SharedPreferences instance
SharedPreferences.Editor editor = prefs.edit();
editor.putInt(key, value);
editor.commit();
}
public void setMode(String mode) // Receive String value for mode
{
SharedPreferences prefs = getSharedPreferences("MY_SHARED_PREF", Context.MODE_PRIVATE); // Create new SharedPreferences instance
SharedPreferences.Editor editor = prefs.edit(); // Create editor variable for SharedPreferences
editor.putString("mode", mode); // Write string mode
editor.commit(); // Apply settings, close SharedPreferences instances
Log.wtf("mode", mode); // Log is successful!
}
}
Danke für jede Hilfe.
P.S. Aber selbst wenn ich mit String mode = "B"; initialisiere, funktioniert es nicht!
Grüße