灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:1955回复:0

Android中findViewById()h获取EditText 空指针问题

楼主#
更多 发布于:2012-09-06 13:46

今天再做一个程序时,发现我使用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就行了。。。。。

喜欢0 评分0
游客

返回顶部