全部博文(403)
2012年(403)
分类: 嵌入式
2012-03-20 19:27:06
今天再做一个程序时,发现我使用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
android:orientation="horizontal" android:id="@+id/input_dialog">
list_view.xml
android:orientation="vertical">
android:singleLine="true">
android:background="@drawable/search">
android:fadingEdge="none" android:divider="#222553"
android:dividerHeight="2dip" android:cacheColorHint="#000000">
原因:因为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就行了。。。。。