Ich versuche, den Zustand einer Variablen mit der onSaveInstanceState() eines Fragments zu speichern. Die Variable, die ich speichern möchte, wird in einer anderen Klasse in meinem Programm erstellt, aber sie wird immer als 0 (Anfangswert) gelesen. Ich weiß, dass ich den Variablenwert erhöhe. Wie kann ich den tatsächlichen Wert der Variablen erhalten? Dies ist mein Code:Fragment erhalten Variablenwert von einer anderen Klasse
public class ObjectivesActivity extends Fragment {
//Variables
ObjectivesLogic objectivesLogic = new ObjectivesLogic();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// retain this fragment
System.out.println("savedInstanceState: " + savedInstanceState);
if (savedInstanceState != null) {
// Restore last state for checked position.
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.activity_objectives, container, false);
}
@Override
public void onStart() {
super.onStart();
if (objectivesLogic.getCount()>0){
objectivesLogic.restoreFragment();
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
int save = objectivesLogic.getCount();
System.out.println("save: "+save);
outState.putInt("Count",save);
}
}
und das ist, wo ich die Variable bin erstellen:
public class ObjectivesLogic extends AppCompatActivity {
//Variables
int count = 0;
View savedLinearLayoutView = null;
Context savedContext = null;
public void addObjective(Context context, View linearLayoutView) {
savedContext = context;
savedLinearLayoutView = linearLayoutView;
if (count < 8) {
EditText editText = new EditText(context);
LinearLayout linearLayoutObjectives = (LinearLayout) linearLayoutView;
editText.setId(R.id.edit_text_);
linearLayoutObjectives.addView(editText);
count++;
}
}
public void restoreFragment(){
for(int i=0; i<count;i++){
EditText editText = new EditText(savedContext);
LinearLayout linearLayoutObjectives = (LinearLayout) savedLinearLayoutView;
editText.setId(R.id.edit_text_);
linearLayoutObjectives.addView(editText);
count++;
}
}
public int getCount() {
return count;
}
}
getCount() bekommt immer 0. Vielen Dank für Ihre Hilfe :)
Ich empfehle Ihnen, eine Parcelable-Version Ihres "Logik" -Objekts zu erstellen, damit Sie es speichern und auf dem Staatspaket wiederherstellen können. Ihr "Logik" -Objekt sollte überhaupt nicht von einer Aktivitätsklasse erben, wenn es sich nicht wirklich um eine Aktivität handelt, Sie brennen einfach Speicher ohne wirklichen Grund auf diese Weise. Legen Sie keine IDs für programmgesteuerte Ansichten fest, da dies nur zur Überbrückung der XML-Code-Lücke verwendet wird. Versuchen Sie nicht, an einer Context-Instanz festzuhalten, da dies zu einem sehr schwerwiegenden Speicherverlust führen kann. – Machinarius
Danke Machinarius! –
Immer glücklich zu helfen – Machinarius