2014-03-26 6 views
57

Ich versuche, einen Warndialog mit einem EditText-Objekt zu erstellen. Ich muss den Anfangstext des EditText programmgesteuert festlegen. Hier ist was ich habe.AlertDialog.Builder mit benutzerdefiniertem Layout und EditText; Ich kann nicht auf Sicht zugreifen

AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this); 
// ...Irrelevant code for customizing the buttons and title 
AlertDialog alertDialog = dialogBuilder.create(); 
LayoutInflater inflater = this.getLayoutInflater(); 
alertDialog.setContentView(inflater.inflate(R.layout.alert_label_editor, null)); 
EditText editText = (EditText) findViewById(R.id.label_field); 
editText.setText("test label"); 
alertDialog.show(); 

Was muss ich ändern, damit ich ein gültiges EditText-Objekt haben kann?

[Bearbeiten]

So wurde es von user370305 und anderen darauf hingewiesen wird, daß ich alertDialog.findViewById (R.id.label_field) verwenden;

Leider gibt es hier ein anderes Problem. Offensichtlich bewirkt das Einstellen der Inhaltsansicht auf den AlertDialog, dass das Programm zur Laufzeit abstürzt. Sie müssen es auf den Builder festlegen.

AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this); 
// ...Irrelevant code for customizing the buttons and title 
dialogBuilder.setView(inflater.inflate(R.layout.alert_label_editor, null)); 
AlertDialog alertDialog = dialogBuilder.create(); 
LayoutInflater inflater = this.getLayoutInflater(); 
EditText editText = (EditText) alertDialog.findViewById(R.id.label_field); 
editText.setText("test label"); 
alertDialog.show(); 

Leider, wenn Sie dies tun, alertDialog.findViewById (R.id.label_field); gibt jetzt null zurück.

[/ edit]

Antwort

155

editText ist ein Teil des alertDialog Layout so Zugriff nur editText anhand von alertDialog

EditText editText = (EditText) alertDialog.findViewById(R.id.label_field); 

Update:

Da in Codezeile dialogBuilder.setView(inflater.inflate(R.layout.alert_label_editor, null));

inflater ist Null.

Update Ihr Code wie unten, und versuchen, die jeder Codezeile

AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this); 
// ...Irrelevant code for customizing the buttons and title 
LayoutInflater inflater = this.getLayoutInflater(); 
View dialogView = inflater.inflate(R.layout.alert_label_editor, null); 
dialogBuilder.setView(dialogView); 

EditText editText = (EditText) dialogView.findViewById(R.id.label_field); 
editText.setText("test label"); 
AlertDialog alertDialog = dialogBuilder.create(); 
alertDialog.show(); 
+10

U auch tun kann als: 'dialogBuilder.setView (R.layout.dialog_layout);' – SiavA

+1

@SiavA diese Methode ist nur Form API 21. – FrenchFalcon

+0

Ich habe versucht, Dialog anzuzeigen, und es funktionierte nicht in RecyclerView, aber dies tat. –

0
View v=inflater.inflate(R.layout.alert_label_editor, null); 
alertDialog.setContentView(v); 
EditText editText = (EditText)v.findViewById(R.id.label_field); 
editText.setText("test label"); 
alertDialog.show(); 
1

ändern, dies zu verstehen:

EditText editText = (EditText) findViewById(R.id.label_field); 

dazu:

EditText editText = (EditText) v.findViewById(R.id.label_field); 
17

Mit dieser eine

AlertDialog.Builder builder = new AlertDialog.Builder(activity); 
    // Get the layout inflater 
    LayoutInflater inflater = (activity).getLayoutInflater(); 
    // Inflate and set the layout for the dialog 
    // Pass null as the parent view because its going in the 
    // dialog layout 
    builder.setTitle(title); 
    builder.setCancelable(false); 
    builder.setIcon(R.drawable.galleryalart); 
    builder.setView(inflater.inflate(R.layout.dialogue, null)) 
    // Add action buttons 
      .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int id) { 

        } 
       } 
      }); 
    builder.create(); 
    builder.show(); 
2

können Sie schreiben:

AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this); 

// ...Irrelevant code for customizing the buttons and title 

LayoutInflater inflater = this.getLayoutInflater(); 

View dialogView= inflater.inflate(R.layout.alert_label_editor, null);      
dialogBuilder.setView(dialogView); 

Button button = (Button)dialogView.findViewById(R.id.btnName); 

    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

     //Commond here...... 

     } 
    }); 

EditText editText = (EditText) 
dialogView.findViewById(R.id.label_field); 

editText.setText("test label"); 

dialogBuilder.create().show(); 
0
/** 
* Shows confirmation dialog about signing in. 
*/ 
private void startAuthDialog() { 
    AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this); 
    AlertDialog alertDialog = dialogBuilder.create(); 
    alertDialog.show(); 

    alertDialog.getWindow().setLayout(800, 1400); 
    LayoutInflater inflater = this.getLayoutInflater(); 
    View dialogView = inflater.inflate(R.layout.auth_dialog, null); 
    alertDialog.getWindow().setContentView(dialogView); 
    EditText editText = (EditText) dialogView.findViewById(R.id.label_field); 
    editText.setText("test label"); 
} 
Verwandte Themen