遇到个难题了,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:
------解决方案--------------------