un-inflated view - npe?

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Chaoz, 23.03.2010.

  1. Chaoz, 23.03.2010 #1
    Chaoz

    Chaoz Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    141
    Erhaltene Danke:
    12
    Registriert seit:
    23.03.2010
    Phone:
    Nexus One
    kurzum:

    wenn ich eine View aus einer xml heraus laden und in einem dialog anzeigen will, kriege ich eine NullPointerException weil die view ja noch nicht existiert.

    auf den (Dialog) Builder rufe ich .setView(view) auf, die gui-elemente aus der xml werden nicht angezeigt und ich bekomme eine NPE sobald ich auf die komponenten zugreifen will.

    ...irgendwelche Ideen? ^^

    LG
    Chaoz
     
  2. ko5tik, 23.03.2010 #2
    ko5tik

    ko5tik Android-Experte

    Beiträge:
    620
    Erhaltene Danke:
    40
    Registriert seit:
    14.10.2009
    Phone:
    HTC Hero
    Keine Haende - keine Keckse ;)
    Poste mal deinen Quellcode.
     
  3. Chaoz, 24.03.2010 #3
    Chaoz

    Chaoz Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    141
    Erhaltene Danke:
    12
    Registriert seit:
    23.03.2010
    Phone:
    Nexus One
    naja.. eigtl ungern.. aber... =p ...

    Code:
    final Builder oBuilder = new AlertDialog.Builder(this);
    TableLayout oTable = (TableLayout) findViewById(R.id.DialogTable);
    oBuilder.setView(oTable);
    
    final EditText oNameText = (EditText) findViewById(R.id.NameText);
    oNameText.setPadding(10, 5, 10, 10);      [B] //NPE[/B]
    
    ...xml...
    Code:
    <TableLayout android:layout_width="wrap_content"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_height="wrap_content" android:id="@+id/DialogTable">
    
        <TableRow android:id="@+id/NameRow" android:layout_width="wrap_content"
            android:layout_height="wrap_content">
            <EditText android:id="@+id/NameText" android:layout_width="wrap_content"
                android:layout_height="wrap_content" android:maxLength="50"/>
        </TableRow>
    </TableLayout>
    nur weil die view im xml ist, heisst das nicht, dass sie schon erzeugt wurde. Normalerweise geschieht das über setContentPane, aber das kann ich nicht auf einen Dialog aufrufen.

    Vorschläge?
     
  4. ko5tik, 24.03.2010 #4
    ko5tik

    ko5tik Android-Experte

    Beiträge:
    620
    Erhaltene Danke:
    40
    Registriert seit:
    14.10.2009
    Phone:
    HTC Hero
    dein findViewById(() bezieht sich auf die Activity, und nicht auf Dialog
    (also: nix da und NPE )

    An deiner Stelle würde ich oBuilder.findViewById() verwenden
     
  5. Chaoz, 24.03.2010 #5
    Chaoz

    Chaoz Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    141
    Erhaltene Danke:
    12
    Registriert seit:
    23.03.2010
    Phone:
    Nexus One
    gleicher fehler =p

    hab jetzt n
    Code:
    Dialog oDlg = oBuilder.create();
    
    und n "oDlg.findViewById( ..)" drin... trotzdem noch NPE....

    sollte ich vorher
    Code:
    oDlg.setcontentView(oTable);
    aufrufen, krieg ich da die NPE...
     
  6. ko5tik, 24.03.2010 #6
    ko5tik

    ko5tik Android-Experte

    Beiträge:
    620
    Erhaltene Danke:
    40
    Registriert seit:
    14.10.2009
    Phone:
    HTC Hero
    Dann hast du Dialogkreation versiebt ;)

    Schenke ich dir:
    Code:
            final View nameEntryView = LayoutInflater.from(this).inflate(R.layout.highscore_entry_dialog, null);
            nameEntryField = (TextView) nameEntryView.findViewById(R.id.username_edit);
    
            // create dialog for saving highscore
            saveHighcoreDialog = (new AlertDialog.Builder(this)).setMessage(R.string.doSaveHighscoreQuestion)
                    .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialogInterface, int i) {
                            submitHighscore();
                        }
                    })
                    .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialogInterface, int i) {
                            System.err.println("canceled");
                        }
                    })
                    .setView(nameEntryView)
                    .create();
            saveHighcoreDialog.setOwnerActivity(this);
    
    
     
    Chaoz bedankt sich.
  7. Chaoz, 24.03.2010 #7
    Chaoz

    Chaoz Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    141
    Erhaltene Danke:
    12
    Registriert seit:
    23.03.2010
    Phone:
    Nexus One
    Hrhr.... "versiebt" würd ichs nich nennen, nur die Interfaces an die ich mich halten muss schränken mich n bissl ein. =/

    Danke für den Code. :)
     

Diese Seite empfehlen