Android中findViewById()h获取EditText 空指针问题
2769 点击·0 回帖
![]() | ![]() | |
![]() | 今天再做一个程序时,发现我使用findViewById(R.id.edit)获取EditText时总是报空指针错误,我想不可能啊!! 最后从findViewById()下手,才发现原来此方法中的R.id.edit是从当前Activity或者Dialog的主布局文件xml中获取。 比如:我的程序: ListActivity类中: 。。。。。。。 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.list_view); } 。。。。。 /** * 显示弹出的输入窗口 * */ public void showInputDialog(FileBean fileBean) { LayoutInflater layoutInflater = getLayoutInflater(); View layout = layoutInflater.inflate(R.layout.input_dialog, (ViewGroup) findViewById(R.id.input_dialog)); EditText editText = (EditText)layout.findViewById(R.id.input_content);// 获取输入文本框 如果改成EditText editText = (EditText)this.findViewById(R.id.input_content);// 空指针错误 new AlertDialog.Builder(this) .setTitle("重命名文件" + new File(fileBean.getPath()).getName()) .setView(layout) .setPositiveButton("确定", new MyDialogListener(editText)) .setNegativeButton("取消", new MyDialogListener(editText)).show(); } 布局文件: input_dialog.xml <?xml version="1.0" encoding="utf-8"?> <!-- 弹出输入对话框布局文件 --> <LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:layout_width="wrap_content" Android:layout_height="wrap_content" Android:orientation="horizontal" Android:id="@+id/input_dialog"> <TextView Android:id="@+id/input_hint" Android:layout_width="60dip" Android:layout_height="50dip" Android:textSize="15dip" Android:text="@string/rename_file"></TextView> <EditText Android:id="@+id/input_content" Android:minWidth="120dip" Android:layout_width="150dip" Android:layout_height="50dip"></EditText> </LinearLayout> list_view.xml <?xml version="1.0" encoding="utf-8"?> <!-- 文件显示列表布局 --> <LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:layout_width="wrap_content" Android:layout_height="wrap_content" Android:orientation="vertical"> <TextView Android:id="@+id/title" Android:layout_width="fill_parent" Android:layout_height="wrap_content" Android:text="@string/title"> </TextView> <LinearLayout Android:id="@+id/s_layout" Android:layout_width="wrap_content" Android:layout_height="wrap_content"> <EditText Android:id="@+id/t_search" Android:layout_width="280dip" Android:layout_height="40dip" Android:text="@string/search" AndroidingleLine="true"></EditText> <ImageButton Android:id="@+id/b_search" Android:layout_width="40dip" Android:layout_height="40dip" Android:background="@drawable/search"></ImageButton> </LinearLayout> <TextView Android:id="@+id/cur_dir" Android:layout_width="wrap_content" Android:layout_height="wrap_content"></TextView> <ListView Android:id="@id/Android:list" Android:layout_width="fill_parent" Android:layout_height="wrap_content" AndroidcrollbarSize="15dip" Android:fadingEdge="none" Android:divider="#222553" Android:dividerHeight="2dip" Android:cacheColorHint="#000000"></ListView> </LinearLayout> 原因:因为EditText editText = (EditText)layout.findViewById(R.id.input_content);是从Dialog对话框布局layout中寻找ID为input_content的子元素 EditText editText = (EditText)this.findViewById(R.id.input_content);// 空指针错误 因为是从this对象即当前ListActivity的布局List_view.xml中寻找ID为input_content的子元素EditText,而我们在List_view.xml布局文件中并无定义此元素故空指针错误 ,并且我们的目的并不是这样。。。。 只要理解findViewById就行了。。。。。 | |
![]() | ![]() |