2016-04-14 9 views
0

Androidチュートリアルのビデオを見ています。 現在、私はListViewを扱っており、私自身のListViewレイアウトを作成したいと思います。 はチュートリアルに基づいて、私のコード(MainActivityの一部)は以下のようになります。独自のリストビューレイアウトを作成する - 「LinearLayoutをandroid.widget.TextViewにキャストすることはできません」

//  ListAdapter listAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, favoriteTVShows); 
     ListAdapter listAdapter = new ArrayAdapter<String>(this, R.layout.row_layout, favoriteTVShows); 
     ListView listView = (ListView) findViewById(R.id.lv_mainListView); 
     listView.setAdapter(listAdapter); 
     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       String tvShowPicked = "You picked: " + String.valueOf(parent.getItemAtPosition(position)); 
       Toast.makeText(MainActivity.this, tvShowPicked, Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    } 

最初のコメントアウト行(simple_list_item_1)それが動作を使用しますが、私自身のレイアウトで(2行目)、残念ながらありません。

これは私のrow_layout.xmlです:

<?xml version="1.0" encoding="utf-8"?> 
<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:orientation="vertical" 
    tools:context="de.oetzi.introductionlistviews.MainActivity" 
    android:id="@+id/linearLayout1"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/textView1" 
     android:textSize="30sp" 
     android:textStyle="bold" 
     android:padding="15dp"/> 

</LinearLayout> 

最後に、ファニーの事、スタックトレース...ところで 、別の初心者の質問:どのように私は行クラスでthehスタックトレースから引き出すことができます悪いですか?

04-14 17:17:47.269 406-406/de.oetzi.introductionlistviews E/ArrayAdapter: You must supply a resource ID for a TextView 04-14 17:17:47.272 406-406/de.oetzi.introductionlistviews D/AndroidRuntime: Shutting down VM 04-14 17:17:47.275 406-406/de.oetzi.introductionlistviews E/AndroidRuntime: FATAL EXCEPTION: main 
                      Process: de.oetzi.introductionlistviews, PID: 406 
                      java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView 
                       at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:386) 
                       at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362) 
                       at android.widget.AbsListView.obtainView(AbsListView.java:2349) 
                       at android.widget.ListView.makeAndAddView(ListView.java:1864) 
                       at android.widget.ListView.fillDown(ListView.java:698) 
                       at android.widget.ListView.fillFromTop(ListView.java:759) 
                       at android.widget.ListView.layoutChildren(ListView.java:1673) 
                       at android.widget.AbsListView.onLayout(AbsListView.java:2153) 
                       at android.view.View.layout(View.java:15678) 
                       at android.view.ViewGroup.layout(ViewGroup.java:5039) 
                       at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703) 
                       at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557) 
                       at android.widget.LinearLayout.onLayout(LinearLayout.java:1466) 
                       at android.view.View.layout(View.java:15678) 
                       at android.view.ViewGroup.layout(ViewGroup.java:5039) 
                       at android.support.design.widget.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:122) 
                       at android.support.design.widget.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:42) 
                       at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1170) 
                       at android.support.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:814) 
                       at android.view.View.layout(View.java:15678) 
                       at android.view.ViewGroup.layout(ViewGroup.java:5039) 
                       at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579) 
                       at android.widget.FrameLayout.onLayout(FrameLayout.java:514) 
                       at android.view.View.layout(View.java:15678) 
                       at android.view.ViewGroup.layout(ViewGroup.java:5039) 
                       at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703) 
                       at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557) 
                       at android.widget.LinearLayout.onLayout(LinearLayout.java:1466) 
                       at android.view.View.layout(View.java:15678) 
                       at android.view.ViewGroup.layout(ViewGroup.java:5039) 
                       at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579) 
                       at android.widget.FrameLayout.onLayout(FrameLayout.java:514) 
                       at android.view.View.layout(View.java:15678) 
                       at android.view.ViewGroup.layout(ViewGroup.java:5039) 
                       at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703) 
                       at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557) 
                       at android.widget.LinearLayout.onLayout(LinearLayout.java:1466) 
                       at android.view.View.layout(View.java:15678) 
                       at android.view.ViewGroup.layout(ViewGroup.java:5039) 
                       at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579) 
                       at android.widget.FrameLayout.onLayout(FrameLayout.java:514) 
                       at android.view.View.layout(View.java:15678) 
                       at android.view.ViewGroup.layout(ViewGroup.java:5039) 
                       at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2086) 
                       at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1843) 
                       at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1061) 
                       at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5891) 
                       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) 
                       at android.view.Choreographer.doCallbacks(Choreographer.java:580) 
                       at android.view.Choreographer.doFrame(Choreographer.java:550) 
                       at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753) 
                       at android.os.Handler.handleCallback(Handler.java:739) 
                       at android.os.Handler.dispatchMessage(Handler.java:95) 
                       at android.os.Looper.loop(Looper.java:135) 
                       at android.app.ActivityThread.main(ActivityThread.java:5293) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at java.lang.reflect.Method.invoke(Method.java:372) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699) 
                      Caused by: java.lang.ClassCastException: android.widget.LinearLayout cannot be cast to android.widget.TextView 
                       at android.widge 
+0

は 'java.lang.IllegalStateExceptionは:ArrayAdapterはTextView'するリソースIDが必要です - 基本的には、' ArrayAdapterを'@android:id/text1'という名前の単一のTextView – Shark

+0

ArrayAdapter.getViewソースを見てください...また、コンストラクタのドキュメントtextViewResourceIdパラメータを確認してください – Selvin

答えて

0

これは、データを1つのビュー項目にしか入れることができないためです。したがって、あなたのレイアウトでは、1つのアイテム(あなたのケースでは1つのTextView)を指定する必要があります。このように見えるためにあなたのxmlファイルを変更します。

<TextView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/textView1" 
    android:textSize="30sp" 
    android:textStyle="bold" 
    android:padding="15dp"/> 
+0

これは一種の解決策ですが、そこには良いです – Selvin

+0

@セルヴィン私はよりよい解決策です。 – Pooya

+0

それ以外は何ですか? 'ArrayAdapter'の代わりに' BaseAdapter'を使います。 – Shark

1

変更アダプタ -

ArrayAdapter listAdapter = new ArrayAdapter<String>(this, R.layout.row_layout,R.id.textView1, countryArray); 
    ListView listView = (ListView) findViewById(R.id.listview); 
    listView.setAdapter(listAdapter); 
+0

感謝Nirel、今私は実際の問題を理解しています。私は1つの特定のTextViewを参照する必要があります。したがって、もう一つの提案された解決法(Pooyaによる)も機能する。 – oetzi