gpt4 book ai didi

android - AlertDialog 中的 EditText 始终为 null

转载 作者:太空宇宙 更新时间:2023-11-03 11:31:21 24 4
gpt4 key购买 nike

我已经搜索过线程,但到目前为止我还没有找到我要找的东西。我创建了一个显示的自定义警报对话框,我几乎可以用它做任何事情。它的自定义对话框由 3 个 TextView 和 3 个 EditText 组成,但每当我需要获取 EditText 时,我都会得到一个空组件。

来 self 的 xml 文件

 <TextView android:layout_alignParentTop="true" 
android:id="@+id/txtAccName"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Name"
android:textSize="23dp"
>

</TextView>
<EditText android:id="@+id/txtEditName"
android:layout_below="@+id/txtAccName"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text=""
android:maxLength="20"
>

我正在尝试获取 EditText 字段:

    EditText txtAccName = (EditText) findViewById(R.id.txtEditName);
Log.d("#############################", "txtAccName="+txtAccName.getText().toString());

但是这样做时,第一行运行良好,第二行导致崩溃并且控件为空。这是我用来创建我需要的自定义 AlertDialog 的 Overwrite 方法。

    @Override
protected Dialog onCreateDialog(int id) {
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View layout = inflater.inflate(R.layout.accountdialog, (ViewGroup) findViewById(R.id.accDialog));

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

builder.setNegativeButton(android.R.string.cancel,new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {

}
});
builder.setPositiveButton(android.R.string.ok,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
EditText txtAccName = (EditText) findViewById(R.id.txtEditName);
//EditText txtAccCur = (EditText) findViewById(R.id.txtEditCur);
//EditText txtAccCountry = (EditText) findViewById(R.id.txtEditCountry);
//DBConn db = new DBConn(Accounts.this.getApplicationContext(), "msaverdb", null, 0);
Log.d("#############################", "CALLING db.insertAccount");
Log.d("#############################", "txtAccName="+txtAccName.getText().toString());
//db.insertAccount(txtAccName.getText().toString(), txtAccCountry.getText().toString(),
// txtAccCur.getText().toString());
Accounts.this.removeDialog(ACC_DIALOG);
}
});
builder.setNegativeButton(android.R.string.cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
Accounts.this.removeDialog(ACC_DIALOG);
}
});
builder.setView(layout);
AlertDialog ad = builder.create();
return ad;
}

非常感谢任何帮助。

最佳答案

记下所有方法调用是如何在匿名内部类中解析的。

findViewById 是一种存在于 View 和您的 Activity 中的方法。此方法在您的 Activity 上的版本在 Activity 窗口的 View 层次结构中搜索 View 。 View 版本搜索 View 实例和所有附加的子项。

您对有问题的代码行的调用:

EditText txtAccName = (EditText) findViewById(R.id.txtEditName);

正在解析为 Activity#findViewById。但是你的对话框的布局没有附加到你的 Activity 窗口,它附加到对话框。您可以通过多种方式找到正确的 View 引用,但最简单的方法可能是从您膨胀的布局的根目录进行搜索:

EditText txtAccName = (EditText) layout.findViewById(R.id.txtEditName);

关于android - AlertDialog 中的 EditText 始终为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6090532/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com