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

更多相关文章

  1. Android Studio Gradle 缓存文件夹设置
  2. Android中使用HorizontalScrollView横向滑动布局
  3. NDK笔记---Android.mk文件
  4. android设备中的临时文件夹在哪里?
  5. 使用Java解析XML文件以获取名称列表
  6. cocos2d-x避免手动修改android.mk文件来编译
  7. 尝试查看所有XML文件的图形布局时出现StackOverFlowError
  8. android使用存储在assets文件夹中的Linux工具
  9. 如何将音频文件与新视频文件合并?是否可以在Android中使用?

随机推荐

  1. android 动态控制状态栏显示和隐藏的方法
  2. android视图继承关系
  3. Android通过PagerSnapHelper改造Recycler
  4. Android文件系统的结构及目录用途、操作
  5. 查询存储空间的代码
  6. Android SDK等下载说明
  7. Android 命名空间和自定义属性
  8. Android JNI详述(二)
  9. Android实现CBC加解密
  10. Android(安卓)Studio增量更新(Mac)