问题是,无论我在哪里或如何调用此布局的组件,它们总是返回 null。
setView(inflater.inflate(R.layout.search_layout, null))
这很好用。它显示 Dialog
内的布局,但是 findViewById(R.id.some_search_layout_children)
始终将子项返回为 null。
我多次尝试清理我的项目,尝试为我的 Dialog
实现另一个类,称为 findViewById()
作为我的主 Activity 的成员
、initSearch()
方法内以及 Dialog
的 OnClickListener
匿名实现内,但结果均相同。我还尝试将子级分解为独立的 View
并以编程方式调用它们:
TextView text = (TextView) findResourceById(R.id.new_independant_textview);
但是,同样的结果。
这是相关代码:
public class Xyz extends Activity {
public void onCreate(...) { // some listener will trigger initSearch() }
private void initSearch() {
AlertDialog.Builder searchDialog = new AlertDialog.Builder(this);
LayoutInflater inflater = this.getLayoutInflater();
searchDialog.setTitle("Search Photos");
searchDialog.setMessage("Specify tag and value...");
// R.layout.search_dialog is my custom layour, it displays fine, it works.
searchDialog.setView(inflater.inflate(R.layout.search_dialog, null));
EditText tagText = (EdiText) findViewById(R.id.tagField); // WILL RETURN NULL
searchDialog.setPositiveButton( ... ) ...
searchDialog.show();
}
这一行:
EditText text = (EditText) findViewById(R.id.tagField);
始终返回 null,无论如何或在何处调用 - 全局、本地 final
等 - 它只是返回 null。
这是我的自定义 Dialog
布局的 XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/search_dialog"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/tagText"
android:padding="7dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="14sp"
android:text="@string/tag" />
<EditText
android:id="@+id/tagField"
android:padding="7dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"/>
<TextView
android:id="@+id/valueText"
android:padding="7dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="14sp"
android:text="@string/value" />
<EditText
android:id="@+id/valueField"
android:padding="7dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"/>
</LinearLayout>
这是我的 R.java
文件:
public static final class id {
public static final int action_settings=0x7f0a0011;
public static final int add_album=0x7f0a0001;
public static final int add_photo=0x7f0a000d;
public static final int albums_list=0x7f0a0003;
public static final int delete_album=0x7f0a000b;
public static final int exit_finder=0x7f0a000f;
public static final int new_directory=0x7f0a000e;
public static final int open_album=0x7f0a000a;
public static final int photos_grid=0x7f0a0000;
public static final int rename_album=0x7f0a000c;
public static final int search_dialog=0x7f0a0004;
public static final int search_icon=0x7f0a0002;
public static final int splash_rutgers=0x7f0a0009;
public static final int tagField=0x7f0a0006; // problematic
public static final int tagText=0x7f0a0005; / problematic
public static final int terminate_app=0x7f0a0010;
public static final int valueField=0x7f0a0008; // problematic
public static final int valueText=0x7f0a0007; // problematic
}
最佳答案
调用findViewById()
将搜索 Activity 布局中的 View ,而不是对话框的 View 。您需要在设置为对话框布局的特定View
上调用findViewById()
。
试试这个
private void initSearch() {
AlertDialog.Builder searchDialog = new AlertDialog.Builder(this);
LayoutInflater inflater = this.getLayoutInflater();
searchDialog.setTitle("Search Photos");
searchDialog.setMessage("Specify tag and value...");
// R.layout.search_dialog is my custom layour, it displays fine, it works.
View dialogView = inflater.inflate(R.layout.search_dialog, null);
searchDialog.setView(dialogView);
EditText tagText = (EdiText) dialogView.findViewById(R.id.tagField);
searchDialog.setPositiveButton( ... ) ...
AlertDialog myAlert = searchDialog.create(); //returns an AlertDialog from a Builder.
myAlert.show();
}
请注意我如何膨胀 View 并将其存储在名为 dialogView
的 View
中。然后,为了找到名为 tagField
的 EditText
,我使用 dialogView.findViewById(R.id.tagField);
关于android - findViewById() 对于对话框中的 View 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59077056/