Absturz bei TabFragment + Verständnisfrage

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Absturz bei TabFragment + Verständnisfrage

    Hallo allerseits,


    ich habe folgenden Code im TabFragment:

    Java-Quellcode

    1. public class TabFragment1 extends SherlockFragment {
    2. @Override
    3. public View onCreateView(LayoutInflater inflater, ViewGroup container,
    4. Bundle savedInstanceState) {
    5. EditText BMI_Alter = (EditText) getView().findViewById(R.id.EditText01);
    6. EditText BMI_Groesse = (EditText) getView().findViewById(R.id.ETgroesse);
    7. SharedPreferences sharedPrefAlter = getActivity().getSharedPreferences("Alterpref", 0);
    8. Integer alter = sharedPrefAlter.getInt("alter", 0);
    9. BMI_Alter.setText(Integer.toString(alter));
    10. SharedPreferences sharedPrefGroesse = getActivity().getSharedPreferences(
    11. "Groessepref", 0);
    12. Integer groesse = sharedPrefGroesse.getInt("groesse", 0);
    13. BMI_Groesse.setText(Integer.toString(groesse));
    14. return inflater.inflate(R.layout.bmicalc_1, container, false);
    15. }
    16. }
    Alles anzeigen



    Ich möchte also, das beim Aufruf des Tabs 1 einige Integer aus den SharedPreferences gelesen werden und anschließend dann in EditTexts eingefügt werden. Leider stürzt die App immer ab. Woran liegt das?

    Und nun noch eine Verständnisfrage: Was gibt die letzte Zeile wieder?

    Java-Quellcode

    1. return inflater.inflate(R.layout.bmicalc_1, container, false);



    Danke im Voraus :)
  • Lies deinen Code mal aus Sicht der Maschine, die ihn ausführen soll.
    1. Zeile:
    EditText BMI_Alter = (EditText) getView().findViewById(R.id.EditText01);
    Damit beabsichtigst du eine View in deinem Layout "R.layout.bmicalc_1" zu finden.
    Woher weiß die Maschine, welches Layout gemeint ist? Wo definierst du das?

    Genau, in der letzten Zeile:
    return inflater.inflate(R.layout.bmicalc_1, container, false);
    Welchen Wert wird deine Variable BMI_Alter demnach also erhalten?
    Genau: null

    Jetzt klar, warum das nicht funktioniert?
    Frag gerne nach, wenn noch etwas unklar ist.
  • Okay, danke. Das ist jetzt natürlich klar :) Ich habe das total vernachlässigt.

    Aber wie bekomme ich es jetzt hin, das "er" weiß, welches Layout ich meine? Ich kann ja das

    Java-Quellcode

    1. return inflater.inflate(R.layout.bmicalc_1, container, false);
    nicht voranstellen, oder?
  • Nein, in der Form kannst du das nicht voranstellen, aber in dieser:


    View v = inflater.inflate(R.layout.bmicalc_1, container, false);
    EditText BMI_Alter = (EditText) v.findViewById(R.id.EditText01);
    // restlicher Code...
    return v;
    ...wenn denn unbedingt alles in der Funktion sein muss.
    Ich würde den Initialisierungscode eher in onActivityCreated() unterbringen.