Wie nehmen Sie die Texteingabe mit DialogFragment in Android?
Ich versuche, ein Wert, der Anwender tritt in einen Dialog mit den empfohlenen DialogFragment Klasse, die Dialog-Konstrukte und läuft einwandfrei, aber ich kann nicht wieder den Wert des EditText-parameter der parent-Klasse, ohne zu bekommen eine Null-Zeiger-Ausnahme.
Meine DialogHost Klasse, diese Konstrukte gibt und links die Eltern auf seine Tasten.
package jo.app.co;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
public class DialogHost extends DialogFragment {
public interface NoticeDialogListener {
public void onDialogPositiveClick(DialogFragment dialog);
public void onDialogNegativeClick(DialogFragment dialog);
}
NoticeDialogListener mListener;
@override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mListener = (NoticeDialogListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString());
}
}
@override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
builder.setView(inflater.inflate(R.layout.dialog_add, null))
.setPositiveButton("Save", new DialogInterface.OnClickListener() {
@override
public void onClick(DialogInterface dialog, int id) {
mListener.onDialogPositiveClick(DialogHost.this);
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
DialogHost.this.getDialog().cancel();
}
});
return builder.create();
}
}
Dies ist meine MainActivity-Klasse zeigt das Dialogfeld
package jo.app.co;
import android.app.DialogFragment;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.widget.EditText;
public class MainActivity extends FragmentActivity implements DialogHost.NoticeDialogListener {
@override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
showNoticeDialog();
}
public void showNoticeDialog() {
DialogFragment dialog = new DialogHost();
dialog.show(getFragmentManager(), "DialogHost");
}
@override
public void onDialogPositiveClick(DialogFragment dialog) {
EditText myText = (EditText) findViewById(R.id.item_added);
try {
Log.d ("IN TRY", myText.getText().toString());
}
catch (Exception e) {
Log.e ("IN CATCH", e.toString());
}
}
@override
public void onDialogNegativeClick(DialogFragment dialog) {
Log.d ("INMAIN", "REACHED NEG");
}
}
Diesdas layout von meinem Dialog für die Referenz.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<EditText
android:id="@+id/item_added"
android:inputType="text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp"
android:layout_marginBottom="4dp"
android:hint="@string/hint_add_item" />
</LinearLayout>
InformationsquelleAutor user2555868 | 2013-07-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Scheint es problem mit der Art und Weise Sie beziehen sich auf das Bearbeiten von text. Sie brauchen, um es aus der Sicht aufgeblasen Bitte versuchen Sie den code unten fügt alle Funktionalitäten, die in Ihrer Haupt Tätigkeit selbst. Wenn Sie möchten, können Sie anpassen, um Ihren Fall mit einer separaten Klasse:
Für die alert-dialog , Sie müssen zum aufblasen eine xml -, nur, wenn Sie planen, mehrere Ansichten wie mehr als 1 edittext in diesem dialog. Wenn Sie planen, haben nur 1 edittext, wie in Ihrem Beispiel, Sie brauchen nicht, eine xml-und Sie können Sie direkt definieren ein edittext und legen Sie es als die Ansicht des Alarm-dialog.
ist die oben genannte Lösung 1 funktioniert für Sie? wenn dem so ist, bitte bestätigen und akzeptieren Sie die Antwort
InformationsquelleAutor tony m