当前位置: 代码迷 >> Android >> findViewById返回Null,该如何解决
  详细解决方案

findViewById返回Null,该如何解决

热度:34   发布时间:2016-05-01 21:54:01.0
findViewById返回Null
遇到个难题了,findViewById返回Null。
查网一般原因有几种:
1.findViewById在setContentView(R.layout.main);之前
2.在另一个view的元素应该用view.findViewById来拿
3.clean一下工程,让ID重新生成

但是我都试过了问题没有解决。
下面我贴一下代码:
布局xml
XML code
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent" android:layout_height="wrap_content"    android:orientation="vertical">    <ScrollView android:layout_width="fill_parent"        android:layout_height="wrap_content">        <LinearLayout android:gravity="center_vertical"            android:orientation="vertical" android:paddingLeft="12.0dip"            android:paddingRight="12.0dip" android:layout_width="fill_parent"            android:layout_height="fill_parent">            <TextView android:layout_width="fill_parent" android:layout_height="wrap_content"                 android:textSize="18.0dip" android:textStyle="bold"                 android:layout_marginTop="3.0dip" android:text="@string/keyword" />            <EditText android:id="@id/keywordEditText"                android:layout_width="fill_parent" android:layout_height="wrap_content"                android:hint="@string/keyword_hint" />            <TextView android:layout_width="fill_parent" android:layout_height="wrap_content"                 android:textSize="18.0dip" android:textStyle="bold"                 android:layout_marginTop="6.0dip" android:text="@string/scope" />            <Spinner android:id="@id/scopeSpinner" style="@style/filter_spinner" />            <TextView android:layout_width="fill_parent" android:layout_height="wrap_content"                 android:textSize="18.0dip" android:textStyle="bold"                 android:layout_marginTop="6.0dip" android:text="@string/lawno" />            <EditText android:id="@id/lawnoEditText"                android:layout_width="fill_parent" android:layout_height="wrap_content"                android:hint="@string/lawno_hint" />            <TextView android:layout_width="fill_parent" android:layout_height="wrap_content"                 android:textSize="18.0dip" android:textStyle="bold"                 android:layout_marginTop="6.0dip" android:text="@string/valid" />            <Spinner android:id="@id/validSpinner" style="@style/filter_spinner" />            <TextView android:layout_width="fill_parent" android:layout_height="wrap_content"                 android:textSize="18.0dip" android:textStyle="bold"                 android:layout_marginTop="6.0dip" android:text="@string/area" />            <Spinner android:id="@id/areaSpinner" style="@style/filter_spinner" />            <TextView android:layout_width="fill_parent" android:layout_height="wrap_content"                 android:textSize="18.0dip" android:textStyle="bold"                 android:layout_marginTop="6.0dip" android:text="@string/category" />            <Spinner android:id="@id/categorySpinner" style="@style/filter_spinner" />            <TextView android:layout_width="fill_parent" android:layout_height="wrap_content"                 android:textSize="18.0dip" android:textStyle="bold"                 android:layout_marginTop="6.0dip" android:text="@string/pubunit" />            <EditText android:id="@id/pubunitEditText"                android:layout_width="fill_parent" android:layout_height="wrap_content"                android:hint="@string/pubunit_hint" />            <TextView android:layout_width="fill_parent" android:layout_height="wrap_content"                 android:textSize="18.0dip" android:textStyle="bold"                 android:layout_marginTop="6.0dip" android:text="@string/pubdate" />            <EditText id="@id/pubdateEditText"                 android:layout_width="fill_parent" android:layout_height="wrap_content"                android:hint="@string/pubdate_hint"/>            <TextView android:layout_width="fill_parent" android:layout_height="wrap_content"                 android:textSize="18.0dip" android:textStyle="bold"                 android:layout_marginTop="6.0dip" android:text="@string/pubdateto" />            <EditText id="@id/pubdatetoEditText"                 android:layout_width="fill_parent" android:layout_height="wrap_content"                android:hint="@string/pubdateto_hint"/>                            <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"                android:layout_width="fill_parent" android:layout_height="wrap_content"                android:gravity="center" android:padding="10dip">                <Button android:id="@id/filterSearchBtn" android:layout_height="wrap_content"                    android:layout_width="75dip" android:text="@string/search"/>                <Button android:id="@id/filterResetBtn" android:layout_height="wrap_content"                    android:layout_width="75dip" android:text="@string/reset"/>                <Button android:id="@id/filterCancelBtn" android:layout_height="wrap_content"                    android:layout_width="75dip" android:text="@string/cancel"/>            </LinearLayout>        </LinearLayout>    </ScrollView></LinearLayout> 


Activity
Java code
public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                inflater = LayoutInflater.from(MainActivity.this);        initTitleBar();        initFilterDialog();        initMainList();    }......public void initFilterDialog(){        //初始化变量        final View dialogView = inflater.inflate(R.layout.filter, null);        keywordEditText = (EditText) dialogView.findViewById(R.id.keywordEditText);        scopeSpinner = (Spinner) dialogView.findViewById(R.id.scopeSpinner);        lawnoEditText = (EditText) dialogView.findViewById(R.id.lawnoEditText);        validSpinner = (Spinner) dialogView.findViewById(R.id.validSpinner);        areaSpinner = (Spinner) dialogView.findViewById(R.id.areaSpinner);        categorySpinner = (Spinner) dialogView.findViewById(R.id.categorySpinner);        pubunitEditText = (EditText) dialogView.findViewById(R.id.pubunitEditText);        searchButton = (Button) dialogView.findViewById(R.id.filterSearchBtn);        searchButton.setOnClickListener(new OnClickEvent());        resetButton = (Button) dialogView.findViewById(R.id.filterResetBtn);        resetButton.setOnClickListener(new OnClickEvent());        cancelButton = (Button) dialogView.findViewById(R.id.filterCancelBtn);        cancelButton.setOnClickListener(new OnClickEvent());        pubdateEditText = (EditText) dialogView.findViewById(R.id.pubdateEditText);        pubdateEditText.setOnClickListener(new OnClickEvent()); //错误在这!!!        pubdatetoEditText = (EditText) dialogView.findViewById(R.id.pubdatetoEditText);        pubdatetoEditText.setOnClickListener(new OnClickEvent());        final Calendar c = Calendar.getInstance();         datePickerDialog = new DatePickerDialog(MainActivity.this,new DatePickerDialog.OnDateSetListener() {            public void onDateSet(DatePicker view, int year, int monthOfYear,                    int dayOfMonth) {                datePickerDialogTarget.setText(year+""+monthOfYear+""+dayOfMonth);            }        },c.get(Calendar.YEAR),c.get(Calendar.MONTH),c.get(Calendar.DAY_OF_MONTH));//        datePickerDialog.setButton("设置", null);        //创建面板        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);        builder.setIcon(R.drawable.m_filter);        builder.setTitle(R.string.filter);        builder.setView(dialogView);        filterDialog=builder.create();    }

————————————————————————————————————————————————
空指针错误发生在pubdateEditText.setOnClickListener(new OnClickEvent());
pubdateEditText为null。
奇怪的是pubdateEditText以上的元素全部拿得到,就是pubdateEditText拿不到。
后来我屏蔽
pubdateEditText = (EditText) dialogView.findViewById(R.id.pubdateEditText);
pubdateEditText.setOnClickListener(new OnClickEvent());
结果pubdatetoEditText.setOnClickListener(new OnClickEvent());的pubdatetoEditText也报空指针。
————————————————————————————————————————————————
这个问题奇怪的地方就是常见的三种问题都被排除,多数元素拿得到只后面这两个拿不到。
大家帮我看看问题出在哪,谢谢!

------解决方案--------------------
layout中定义了两个pubdatetoEditText
------解决方案--------------------
EditText id="@id/pubdatetoEditText" 
是不是少了
android:
------解决方案--------------------
探讨
EditText id="@id/pubdatetoEditText"
是不是少了
android:
  相关解决方案