android – findViewById()返回null – 尝试一切

前端之家收集整理的这篇文章主要介绍了android – findViewById()返回null – 尝试一切前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我放弃了…甚至我的教授也不知道为什么会发生这种情况.

问题是:无论我在哪里或如何调用此布局的组件,它们总是返回null.

LAYOUT: search_layout. 2 EdiText and 2 TextView children.

  1. RUNTIME: setView(inflater.inflate(R.layout.search_layout,null)) // works fine,it displays the layout inside the dialog,yet,children are always returned as null by findViewById(R.id.some_search_layout_children)

例外:解析XML的异常,因为资源未找到,因此为空.

TRIED:清理我的项目大约1024次,尝试为我的对话框实现另一个类,同样的结果,称为findViewById作为我的主要活动的成员,在方法initSearch()内部和对我的对话框的OnClickListener的匿名实现结果.打破孩子们的独立观点,并以编程方式将他们称为:

  1. TextView text = (TextView) findResourceById(R.id.new_independant_textview); // same result

我想我试过一切

这是我的代码

  1. public class Xyz extends Activity {
  2. public void onCreate(...) { // some listener will trigger initSearch() }
  3.  
  4. private void initSearch() {
  5. AlertDialog.Builder searchDialog = new AlertDialog.Builder(this);
  6. LayoutInflater inflater = this.getLayoutInflater();
  7. searchDialog.setTitle("Search Photos");
  8. searchDialog.setMessage("Specify tag and value...");
  9. // R.layout.search_dialog is my custom layour,it displays fine,it works.
  10. searchDialog.setView(inflater.inflate(R.layout.search_dialog,null));
  11. EditText tagText = (EdiText) findViewById(R.id.tagField); // WILL RETURN NULL
  12. searchDialog.setPositiveButton( ... ) ...
  13. searchDialog.show();
  14. }

现在,当我做:

  1. EditText text = (EditText) findViewById(R.id.tagField); // returns null,ALWAYS
  2. // no matter HOW,WHERE,global,local final,etc,it just returns null.

以下是我的自定义布局的XML:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:id="@+id/search_dialog"
  4. android:layout_width="wrap_content"
  5. android:layout_height="wrap_content"
  6. android:orientation="vertical" >
  7. <TextView
  8. android:id="@+id/tagText"
  9. android:padding="7dp"
  10. android:layout_width="match_parent"
  11. android:layout_height="wrap_content"
  12. android:textSize="14sp"
  13. android:text="@string/tag" />
  14. <EditText
  15. android:id="@+id/tagField"
  16. android:padding="7dp"
  17. android:layout_width="match_parent"
  18. android:layout_height="wrap_content"
  19. android:inputType="text"/>
  20. <TextView
  21. android:id="@+id/valueText"
  22. android:padding="7dp"
  23. android:layout_width="match_parent"
  24. android:layout_height="wrap_content"
  25. android:textSize="14sp"
  26. android:text="@string/value" />
  27. <EditText
  28. android:id="@+id/valueField"
  29. android:padding="7dp"
  30. android:layout_width="match_parent"
  31. android:layout_height="wrap_content"
  32. android:inputType="text"/>
  33. </LinearLayout>

这是我的R.java文件

  1. public static final class id {
  2. public static final int action_settings=0x7f0a0011;
  3. public static final int add_album=0x7f0a0001;
  4. public static final int add_photo=0x7f0a000d;
  5. public static final int albums_list=0x7f0a0003;
  6. public static final int delete_album=0x7f0a000b;
  7. public static final int exit_finder=0x7f0a000f;
  8. public static final int new_directory=0x7f0a000e;
  9. public static final int open_album=0x7f0a000a;
  10. public static final int photos_grid=0x7f0a0000;
  11. public static final int rename_album=0x7f0a000c;
  12. public static final int search_dialog=0x7f0a0004;
  13. public static final int search_icon=0x7f0a0002;
  14. public static final int splash_rutgers=0x7f0a0009;
  15. public static final int tagField=0x7f0a0006; // problematic
  16. public static final int tagText=0x7f0a0005; / problematic
  17. public static final int terminate_app=0x7f0a0010;
  18. public static final int valueField=0x7f0a0008; // problematic
  19. public static final int valueText=0x7f0a0007; // problematic
  20. }

感谢您的帮助,快乐狩猎.

解决方法

调用findViewById()将在Activity的布局中搜索视图,而不是对话框的视图.您需要在您设置为对话框布局的特定视图上调用findViewById().

尝试这个

  1. private void initSearch() {
  2. AlertDialog.Builder searchDialog = new AlertDialog.Builder(this);
  3. LayoutInflater inflater = this.getLayoutInflater();
  4. searchDialog.setTitle("Search Photos");
  5. searchDialog.setMessage("Specify tag and value...");
  6. // R.layout.search_dialog is my custom layour,it works.
  7. View dialogView = inflater.inflate(R.layout.search_dialog,null);
  8. searchDialog.setView(dialogView);
  9. EditText tagText = (EdiText) dialogView.findViewById(R.id.tagField);
  10. searchDialog.setPositiveButton( ... ) ...
  11. AlertDialog myAlert = searchDialog.create(); //returns an AlertDialog from a Builder.
  12. myAlert.show();
  13. }

注意我如何使视图膨胀并将其存储在View命名的dialogView中.然后,要找到您的EditText命名为tagField,我使用dialogView.findViewById(R.id.tagField);

猜你在找的Android相关文章