2012-05-05 12 views
1

私はListViewについての本で見つけた例を実行しようとしています。本が述べたように、私はstring.xmlファイルにstring-arrayを作成し、ListViewのレイアウトはフォルダ内にあります。ListViewを設定するとアプリがクラッシュするのはなぜですか?

問題は、アクティビティを実行するとアプリがクラッシュすることです。誰が間違いがどこにあるのか教えていただけますか?

CODE1: list_item.xml

public class ListViewTestActivity extends ListActivity { 
/** Called when the activity is first created. */ 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    String[] c = getResources().getStringArray(R.array.cities); 
    setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, c)); 
    }} 

string.xmlを

<resources> 

<string name="hello">Hello World, ListViewTestActivity!</string> 
<string name="app_name">ListViewTest</string> 

<string-array 
     name="cities"> 
    <item>Bath</item> 
    <item>Birmingham</item> 
    <item>Bradford</item> 
    <item>Brighton</item> 
    <item>Bristol</item> 
    <item>Cambridge</item> 
    <item>Canterbury</item> 
</string-array> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <TextView 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:textSize="28dip"> 
    </TextView> 


</LinearLayout> 

LogCat

05-05 22:45:16.018: E/ArrayAdapter(648): You must supply a resource ID for a TextView 
05-05 22:45:16.048: E/AndroidRuntime(648): FATAL EXCEPTION: main 
05-05 22:45:16.048: E/AndroidRuntime(648): java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView 
05-05 22:45:16.048: E/AndroidRuntime(648): at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:347) 
05-05 22:45:16.048: E/AndroidRuntime(648): at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323) 
05-05 22:45:16.048: E/AndroidRuntime(648): at android.widget.AbsListView.obtainView(AbsListView.java:1430) 
05-05 22:45:16.048: E/AndroidRuntime(648): at android.widget.ListView.makeAndAddView(ListView.java:1745) 
05-05 22:45:16.048: E/AndroidRuntime(648): at android.widget.ListView.fillDown(ListView.java:670) 
05-05 22:45:16.048: E/AndroidRuntime(648): at android.widget.ListView.fillFromTop(ListView.java:727) 
05-05 22:45:16.048: E/AndroidRuntime(648): at android.widget.ListView.layoutChildren(ListView.java:1598) 
05-05 22:45:16.048: E/AndroidRuntime(648): at android.widget.AbsListView.onLayout(AbsListView.java:1260) 
05-05 22:45:16.048: E/AndroidRuntime(648): at android.view.View.layout(View.java:7175) 
05-05 22:45:16.048: E/AndroidRuntime(648): at android.widget.FrameLayout.onLayout(FrameLayout.java:338) 
05-05 22:45:16.048: E/AndroidRuntime(648): at android.view.View.layout(View.java:7175) 
05-05 22:45:16.048: E/AndroidRuntime(648): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254) 
05-05 22:45:16.048: E/AndroidRuntime(648): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130) 
05-05 22:45:16.048: E/AndroidRuntime(648): at android.widget.LinearLayout.onLayout(LinearLayout.java:1047) 
05-05 22:45:16.048: E/AndroidRuntime(648): at android.view.View.layout(View.java:7175) 
05-05 22:45:16.048: E/AndroidRuntime(648): at android.widget.FrameLayout.onLayout(FrameLayout.java:338) 
05-05 22:45:16.048: E/AndroidRuntime(648): at android.view.View.layout(View.java:7175) 
05-05 22:45:16.048: E/AndroidRuntime(648): at android.view.ViewRoot.performTraversals(ViewRoot.java:1140) 
05-05 22:45:16.048: E/AndroidRuntime(648): at android.view.ViewRoot.handleMessage(ViewRoot.java:1859) 
05-05 22:45:16.048: E/AndroidRuntime(648): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-05 22:45:16.048: E/AndroidRuntime(648): at android.os.Looper.loop(Looper.java:130) 
05-05 22:45:16.048: E/AndroidRuntime(648): at android.app.ActivityThread.main(ActivityThread.java:3683) 
05-05 22:45:16.048: E/AndroidRuntime(648): at java.lang.reflect.Method.invokeNative(Native Method) 
05-05 22:45:16.048: E/AndroidRuntime(648): at java.lang.reflect.Method.invoke(Method.java:507) 
05-05 22:45:16.048: E/AndroidRuntime(648): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
05-05 22:45:16.048: E/AndroidRuntime(648): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
05-05 22:45:16.048: E/AndroidRuntime(648): at dalvik.system.NativeStart.main(Native Method) 
05-05 22:45:16.048: E/AndroidRuntime(648): Caused by: java.lang.ClassCastException: android.widget.LinearLayout 
05-05 22:45:16.048: E/AndroidRuntime(648): at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:340) 
+0

また、ログを投稿することはできますか? ログを投稿した後、私たちはより良いお手伝いをすることができます。 –

答えて

2

あなたは、行項目にその特定のレイアウトを使用する場合は、TextViewidを割り当て、アダプタがどこのデータを配置する場所を知っているように、アダプタのコンストラクタでそれを渡します

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 

<TextView 
    android:id="@+id/text" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:textSize="28dip"> 
</TextView> 

あなたの活動の中で:

+0

@Androelphaもちろん、残念です。 – Luksprog

0

XMLファイルは次のようでなければなりません:あなたはおそらくlist_item.xmlであなたの線形レイアウトを閉じている

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/monid" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:textSize="28dip" /> 
+0

私はそれを試しましたが、それでもクラッシュします – Androelpha

+0

あなたは本当にこの行を書いていましたか? 'android:id =" @ + id/idyouwant "' – thomasg

0

。 これでうまくいかない場合は、ログを投稿してください

0

おそらく、onContentView(...)をonCreateのどこかで呼び出す必要があります。

関連する問題