2014-09-01 90 views
1

我使用arrayAdpater我listView,但我得到這個例外,我不明白爲什麼,我插入我的layout.xml的id和listView的ID當我初始化arrayAdpater,但我不知道要解決這個問題ArrayAdpater IllegalStateException異常Android上

create_boundary_map.xml(在其上定義ListView的文件)

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="400px" 
    android:layout_height="match_parent" 
    android:layout_gravity="center" 
    android:orientation="vertical" > 

    <ListView 
     android:id="@+id/list_view" 
     android:layout_width="match_parent" 
     android:layout_height="138dp" > 
    </ListView> 

</LinearLayout> 

功能我做這裏面:

ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, R.layout.create_boundary_map, R.id.list_view, 
       this.fooStrings()); 

我的logcat:

09-01 18:34:56.121: E/ArrayAdapter(18757):  You must supply a resource ID for a TextView 
09-01 18:34:56.160: E/AndroidRuntime(18757): at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362) 
09-01 18:34:56.160: E/AndroidRuntime(18757): FATAL EXCEPTION: main 
09-01 18:34:56.160: E/AndroidRuntime(18757): java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView 
09-01 18:34:56.160: E/AndroidRuntime(18757): at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:386) 
09-01 18:34:56.160: E/AndroidRuntime(18757): at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362) 
09-01 18:34:56.160: E/AndroidRuntime(18757): at android.widget.AbsListView.obtainView(AbsListView.java:2465) 
09-01 18:34:56.160: E/AndroidRuntime(18757): at android.widget.ListView.makeAndAddView(ListView.java:1769) 
09-01 18:34:56.160: E/AndroidRuntime(18757): at android.widget.ListView.fillDown(ListView.java:672) 
09-01 18:34:56.160: E/AndroidRuntime(18757): at android.widget.ListView.fillFromTop(ListView.java:733) 
09-01 18:34:56.160: E/AndroidRuntime(18757): at android.widget.ListView.layoutChildren(ListView.java:1622) 
09-01 18:34:56.160: E/AndroidRuntime(18757): at android.widget.AbsListView.onLayout(AbsListView.java:2300) 
09-01 18:34:56.160: E/AndroidRuntime(18757): at android.view.View.layout(View.java:14061) 

在此先感謝。

+0

你可以發佈你的ArrayAdapter代碼嗎? – 2014-09-01 16:51:27

回答

2

Adapter需要一個具有TextView而不是ListView的佈局。您活動的onCreate內

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/item" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"/> 

然後使用您的佈局(create_boundary_map.xml):

創建一個新的XML像list_item.xml

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.create_boundary_map); 
    // Use the adapter to populate your list: 
    ListView listView = (ListView) findViewById(R.id.list_view); 


    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, R.layout.list_item, R.id.item, this.fooStrings()); 

    listView.setAdapter(arrayAdapter); 
} 
+0

我可以如何整合我現有的XML? – 2014-09-01 16:53:13

+0

@YokupokuMaioku更新了一個完整的例子。 – Simas 2014-09-01 16:55:50

+0

好,非常感謝。 – 2014-09-01 16:56:29

1

這是正確的方法來創建適配器:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.create_boundary_map.xml); 
    //create_boundary_map.xml must contain list_view. 
    ListView myListView = (ListView) findViewById(R.id.list_view); 
ArrayAdapter<String> adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, this.fooStrings()); 
    myListView.setAdapter(adapter); 
... 
... 
... 
} 

或者你可以創建自定義列布局,填補了值,例如:

row_layout.xml包含一個TextView稱爲myTextView

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
     <TextView 
      android:id="@+id/myTextView" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content"/> 
</LinearLayout> 

使用row_layout.xml

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.create_boundary_map.xml); 
     //create_boundary_map.xml must contain list_view. 
     ListView myListView = (ListView) findViewById(R.id.list_view); 
    ArrayAdapter<String> adapter = new ArrayAdapter(this, android.R.layout.row_layout, R.id.myTextView, this.fooStrings()); 
    myListView.setAdapter(adapter); 
    ... 
    ... 
    ... 
    } 

見我的答案類似的問題在這裏:android listview not working

相關問題