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

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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值