Wieder mal ein Dialog

Y

Yrrel

Neues Mitglied
0
Hallo Leute,

bin mal wieder dabei ne App mit nem Dialog zu schreiben. Es wäre zwar auch ohne möglich (was wohl die bessere Idee wäre), aber mit Dialog sieht es einfach schöner aus^^

Für des Dialog verwende ich ein XML-Layout. Beim showDialog() wird auf den onCreateDialog() verwiesen der dann schließlich meine dialogErzeugen() Methode aufruft. Nun mein Problem:

beim Aufrufen soll der Text eines TextViews des XML-Layouts neu gesetzt werden. Dazu nehme ich die findViewById() methode. Alles ganz toll. Nur gibt es immer wenn ich den Text mit setText() neu setzten will eine NullPointerException. (LogCat liefert sonst nichts sinnvolles)

Woran kann das liegen? Ohne setzten eines neuen Textes funktioniert der Dialog ohne Probleme. Muss ich bei Dialogen beim textneusetzten etwas beachten?

Bin für JEDEN Tipp dankbar. Bitte helft mir. Danke schonmal im Vorraus

MFG Yrrel


------edit-------

Hier mal die Codeauschschnitte:

XML-Code des Dialogs:
Code:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:descendantFocusability="beforeDescendants"
    android:focusableInTouchMode="true" 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:minHeight="10dip"
    android:minWidth="10dip"
    android:id="@+id/sv" >
      
    <LinearLayout
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:orientation="vertical"

    >
         <TableLayout
            android:layout_gravity="left"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
                  
.
.
.

            <TableRow
                android:id="@+id/tranzeigen"
                android:layout_height="wrap_content"
                android:layout_width="match_parent">
            <TextView 
                android:text="Fach:"
                android:padding="10dp"
                android:layout_height="wrap_content"
                android:layout_width="match_parent"
            ></TextView>
            <TextView
                android:id="@+id/fachanzeigen"
                android:layout_height="wrap_content"
                android:layout_width="match_parent"></TextView>
                
            </TableRow>
.
.
.
            
         </TableLayout>

    </LinearLayout>
</ScrollView>

Und der zugehörige Dialog-Aufruf
Code:
protected Dialog onCreateDialog(int id) {
    Dialog dialog = null;
    dialog = erzeugeDialog(id);
    return dialog; 
}
protected Dialog erzeugeDialog(int id){
    ScrollView sv = new ScrollView(this);
    sv.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));
    Dialog dialog = new Dialog(this);
    dialog.setContentView(R.layout.fachanzeigen);
    
.
.
.

    TextView tvname = (TextView) findViewById(R.id.fachanzeigen);
    if(tvname==null){Toast.makeText(getApplicationContext(), "TextView ist NULL", Toast.LENGTH_SHORT).show();}
    else{String str = tvname.getText().toString() + ""; Toast.makeText(getApplicationContext(),str, Toast.LENGTH_SHORT).show();}
.
.
.

    return dialog;
}

Hab mal nur die wichtigen Stellen rausgeschrieben. Hab auch mal ne NULL-Abfrage gemacht mit nem Toast. Liefert leider dass der erzeugte TextView ==NULL ist. Was hab ich da falsch gemacht? Oder kann man aus einem Dialogaufruf gar nicht nen XML-View verändern?
 
Zuletzt bearbeitet:
hast du deine textview deklariert?

Code wäre glaub ich auch ganz gut. ansonsten könntest du an der stelle die textview auf null prüfen und ggf. neu instanzieren ...
 
Eventuell ist auch das String-Objekt null.

Wenn du den Code postest, kann man dir sicher helfen.
 
Also hab im Startpost mal den Code editiert. Hab zwischenzeitlich auch ne NULL Abfrage gemacht. Anscheinend schaffts das APP nicht den TextView zu finden/zu erzeugen, da der mit dem findViewById() erzeugte TextView nicht initiiert wird.
Hab ich nen Fehler im Text oder ists ein Denkfehler im Code, dass man im Dialog nicht den XML ändern kann?
 
TextView tvname = (TextView) findViewById(R.id.fachanzeigen);




du setzt die contentview des dialogs - rufst aber findviewbyid über die activity auf
 
swordi schrieb:
TextView tvname = (TextView) findViewById(R.id.fachanzeigen);




du setzt die contentview des dialogs - rufst aber findviewbyid über die activity auf

Ich denke swordi hat recht, probier's mal mit:

TextView tvname = (TextView) dialog.findViewById(R.id.fachanzeigen);
 
Vielen Dank, läuft^^

Das mit den ContentViews hab ich noch nicht so wirklich verstanden. HAt da jemand ein Tutorial oder kanns schnell erklären?
 
Yrrel schrieb:
Vielen Dank, läuft^^

Das mit den ContentViews hab ich noch nicht so wirklich verstanden. HAt da jemand ein Tutorial oder kanns schnell erklären?

Das hat nichts mit ContentViews zu tun, sondern mit Objektorientierung. ;)

tuts gibts dazu genug auf google.

als Tipp:
du solltest Methoden nicht immer direkt aufrufen, sondern immer mit dem this-Zeiger (this.FindViewById). Dann solltest du schnell ein Gefühl kriegen das man Methoden immer "auf irgendwas drauf" aufruft. Diese Methoden stehen nicht einfach so im Raum.

dann hättest du schnell gesehen das du im falschen Objekt nach deinem View "gesucht" hast.
 

Ähnliche Themen

W
  • WuDiDong
Antworten
3
Aufrufe
767
jogimuc
J
wernho
Antworten
11
Aufrufe
692
wernho
wernho
W
  • waltsoft
Antworten
4
Aufrufe
938
waltsoft
W
Zurück
Oben Unten