0

我有一个简单的 ListView 和一个 ArrayAdapter。但是当android去绘制屏幕时,我每次都会得到一个空指针异常。这是堆栈:

Thread [<1> main] (Suspended (exception NullPointerException))  
    <VM does not provide monitor information>   
    ArrayAdapter.createViewFromResource(int, View, ViewGroup, int) line: 392    
    ArrayAdapter.getView(int, View, ViewGroup) line: 362    
    ListView(AbsListView).obtainView(int, boolean[]) line: 2210 
    ListView.measureHeightOfChildren(int, int, int, int, int) line: 1244    
    ListView.onMeasure(int, int) line: 1155 
    ListView(View).measure(int, int) line: 12775    
    LinearLayout(ViewGroup).measureChildWithMargins(View, int, int, int, int) line: 4709    
    LinearLayout.measureChildBeforeLayout(View, int, int, int, int, int) line: 1385 
    LinearLayout.measureVertical(int, int) line: 670    
    LinearLayout.onMeasure(int, int) line: 563  
    LinearLayout(View).measure(int, int) line: 12775    
    FrameLayout(ViewGroup).measureChildWithMargins(View, int, int, int, int) line: 4709 
    FrameLayout.onMeasure(int, int) line: 293   
    FrameLayout(View).measure(int, int) line: 12775 
    LinearLayout(ViewGroup).measureChildWithMargins(View, int, int, int, int) line: 4709    
    LinearLayout.measureChildBeforeLayout(View, int, int, int, int, int) line: 1385 
    LinearLayout.measureVertical(int, int) line: 670    
    LinearLayout.onMeasure(int, int) line: 563  
    LinearLayout(View).measure(int, int) line: 12775    
    PhoneWindow$DecorView(ViewGroup).measureChildWithMargins(View, int, int, int, int) line: 4709   
    PhoneWindow$DecorView(FrameLayout).onMeasure(int, int) line: 293    
    PhoneWindow$DecorView.onMeasure(int, int) line: 2240    
    PhoneWindow$DecorView(View).measure(int, int) line: 12775   
    ViewRootImpl.performTraversals() line: 1117 
    ViewRootImpl.handleMessage(Message) line: 2505  
    ViewRootImpl(Handler).dispatchMessage(Message) line: 99 
    Looper.loop() line: 137 
    ActivityThread.main(String[]) line: 4514    
    Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]  
    Method.invoke(Object, Object...) line: 511  
    ZygoteInit$MethodAndArgsCaller.run() line: 790  
    ZygoteInit.main(String[]) line: 557 
    NativeStart.main(String[]) line: not available [native method]  

代码也很简单。XML:

<LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#0099cc"
    tools:context=".FullscreenActivity"
    android:orientation="vertical">

    <ListView
        android:id="@+id/status_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>

</LinearLayout>

和代码:

    String test[] = {"Line 1","Line 2"};

    ListView status = (ListView) findViewById(R.id.status_view);
    ArrayAdapter<String> statusList = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,R.id.status_view,test);     
    status.setAdapter(statusList);

我见过很多做同样事情的例子,大多数人在有一个包含一些空指针的字符串数组时都会遇到这个错误。如您所见,这里不是这种情况。以前有人和这个打过架吗?

4

2 回答 2

1

以下是ArrayAdapter您正在使用的官方 java 文档:

公共 ArrayAdapter(上下文上下文、int 资源、int textViewResourceId、T[] 对象)

在 API 级别 1 构造函数中添加

上下文 当前上下文。

resource包含在实例化视图时使用的布局的布局文件的资源 ID。

textViewResourceId 要填充的布局资源中 TextView 的 id

objects 要在 ListView 中表示的对象。

所以第二个参数应该是布局文件,其中包含列表中的行项目的视图,而不是列表。布局应该是列表中的一行...

第三个值应该是作为第二个参数给出的布局中文本视图的 id,其中列表视图可以插入存储在字符串数组中的值。

于 2013-01-04T19:20:34.300 回答
0

you should not use "this" just like the way you are using, instead use ActivityName.this .. means you should write activity name before "this"

if your activity is

ActivityName extends Activity {

}

then

String test[] = {"Line 1","Line 2"};

ListView status = (ListView) findViewById(R.id.status_view);
ArrayAdapter<String> statusList = new ArrayAdapter<String>(ActivityName.this,android.R.layout.simple_list_item_1,test);     
status.setAdapter(statusList);
于 2013-01-04T19:34:17.787 回答