Ich habe ein Dialogfeld mit der AlertDialog.Builder-Klasse erstellt und builder.setView (int resource) aufgerufen, um ein benutzerdefiniertes Layout für die Texteingabe zu erhalten.Android: EditText-Wert von DialogBox mit benutzerdefinierter Ansicht abrufen
Ich versuche, die Werte aus den EditTexts auf dem Layout abzurufen, wenn der Benutzer OK drückt, aber wenn findViewByID() aufgerufen wird, bekomme ich Null-Referenzen. Es scheint, dass dies anderswo geschieht, wenn man vor dem Aufruf von setContentView() versucht, eine View zu laden. Mit dem Builder habe ich das offensichtlich nicht gemacht, gibt es eine Möglichkeit, die Ansichten wiederzuerlangen, oder sollte ich meine Dialoge anders aufbauen?
Java und Stack-Trace:
// Set up the on click of the Button
Button add = (Button) findViewById(R.id.manage_connections_add_button);
add.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view) {
AlertDialog.Builder builder = new AlertDialog.Builder(ManageConnectedServicesActivity.this);
builder.setTitle("Add Service");
builder.setView(R.layout.component_sharing_service_dialogue);
// Set up the buttons on the dialog
builder.setPositiveButton("Add", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialogInterface, int i) {
// Get the connected service url
EditText url = (EditText) findViewById(R.id.add_sharing_service_url); // This is the offending line
addConnectedService(url.getText().toString()); // Crashes here
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.cancel();
}
});
builder.show();
}
});
Stack Trace:
12-05 09:54:40.825 1889-1889/uk.mrshll.matt.accountabilityscrapbook E/AndroidRuntime: FATAL EXCEPTION: main
Process: uk.mrshll.matt.accountabilityscrapbook, PID: 1889
java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
at uk.mrshll.matt.accountabilityscrapbook.ManageConnectedServicesActivity$1$1.onClick(ManageConnectedServicesActivity.java:63)
at android.support.v7.app.AlertController$ButtonHandler.handleMessage(AlertController.java:157)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5343)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
EditText URL = (EditText) -Dialog. findViewById (R.id.add_sharing_service_url); Um die Edittext-ID aus dem Diague zu erhalten, müssen Sie die ID so ändern – Nithinlal
Post-Code, wie Sie die benutzerdefinierte Ansicht zum Dialog aufblasen – Nithinlal
Mögliches Duplikat von [AlertDialog.Builder mit benutzerdefiniertem Layout und EditText; kann nicht auf die Ansicht zugreifen] (http://stackoverflow.com/questions/22655599/alertdialog-builder-with-custom-layout-and-edittext-cannot-access-view) – Raghavendra