我正在设置ArrayAdapter,我收到以下错误:
Thread [<1> main] (Suspended (exception NullPointerException))
ArrayAdapter.createViewFromResource(int, View, ViewGroup, int) line: 355
ArrayAdapter.getView(int, View, ViewGroup) line: 323
ListView(AbsListView).obtainView(int, boolean[]) line: 1294
ListView.measureHeightOfChildren(int, int, int, int, int) line: 1198
Run Code Online (Sandbox Code Playgroud)
my symptomremedyActivity.java看起来像:
setContentView(R.layout.symptomremedy);
ListView remedyList = (ListView) findViewById(R.id.ListView_SymptomRemedy);
remedyList.setTextFilterEnabled(true);
ArrayAdapter<String> adapt = new ArrayAdapter<String>(this, R.layout.menu_item, remedyArray);
remedyList.setAdapter(adapt);
Run Code Online (Sandbox Code Playgroud)
我的symptomremedy.xml布局如下所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:id="@+id/Button_BACK"
android:layout_width="wrap_content"
android:layout_height="@dimen/menu_button_height"
android:layout_alignTop="@+id/Button_BACK"
android:layout_below="@+id/ImageView_MenuHeader"
android:textSize="@dimen/menu_button_text_size"
android:text="@string/back"></Button>
<ListView
android:layout_height="wrap_content"
android:id="@+id/ListView_SymptomRemedy"
android:layout_width="fill_parent"
android:background="@color/menu_white"
android:divider="@drawable/straight_divider"
android:listSelector="@drawable/textured"
android:layout_alignParentTop="true"></ListView>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
和menu_item.xml布局如下所示:
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:textSize="@dimen/menu_item_size"
android:text="test string"
android:textColor="@color/menu_black"
android:layout_height="fill_parent"
/>
Run Code Online (Sandbox Code Playgroud)
我在其他活动中做过类似的事情没有问题,所以我无法弄清楚为什么这里有问题.所涉及的所有字段都是非空的,即remedyArray等.任何人都知道问题是什么?
事实证明问题在于我为ArrayAdapter创建数组的方式.以前我的代码是:
String remedyArray[] = new String[30];
Run Code Online (Sandbox Code Playgroud)
当我将代码更改为:
String remedyArray[] = new String[30];
for ( int i = 0; i< 30; i++){
remedyArray[i] = "";
}
Run Code Online (Sandbox Code Playgroud)
一切顺利.我不完全理解为什么,但似乎用数值初始化数组就行了.我猜Java的一个独特之处在于,当创建一个数组时,条目包含null,我认为是那些导致问题的空值.
中的NullPointerException
ArrayAdapter.createViewFromResource
Run Code Online (Sandbox Code Playgroud)
表明问题来自于
R.layout.menu_item
Run Code Online (Sandbox Code Playgroud)
如果此文件存在于/ res/layout /下,请检查它是否已在R.java中注册
另外,您使用的是自定义ArrayAdapter吗?如果是,请使用代码更新问题.
如果您没有使用自定义ArrayAdapter,请尝试在menu_item中向TextView添加标识符.如果您没有覆盖getView,Android将尝试使用remedyList中的数据填充resourceId(menu_item.xml)中的TextView.我从来没有这样做过,但你可能需要使用这个构造函数指定TextView id:
ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects)
Run Code Online (Sandbox Code Playgroud)
检查ArrayAdapter构造函数.
| 归档时间: |
|
| 查看次数: |
8146 次 |
| 最近记录: |