2016-04-14 15 views
0

Sadece bazı Android öğretici videoları içine almak için izliyorum. Şu anda ListViews ile ilgileniyorum ve kendi ListView düzenimi oluşturmak istiyorum. öğretici dayanarak benim kodu (MainActivity parçası) olduğu gibi görünür:Kendi Liste Görünümü Düzeni Oluşturmak - "LinearLayout android.widget.TextView için döküm olamaz"

//  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(); 
      } 
     }); 
    } 

giren ilk çıkar yorumladı hattını (simple_list_item_1) çalıştığını kullanılarak fakat kendi düzeni (2 hat) ne yazık ki değil.

Bu

benim row_layout.xml geçerli:

<?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> 

Son olarak, funnies şey StackTrace ... arada, başka yeni soru: Nasıl theh stacktrace türetebileceğimiz hangi satırın hangi sınıfta kötülük nedir?

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 bir TextView' olmasını kaynak kimliği gerektirir - Temel olarak,' ArrayAdapter 'yalnızca bir tür görünümü kabul eder - tek bir TextView '@android: id/text1' – Shark

+0

ArrayAdapter.getView kaynağına bir göz atın ... ayrıca kurucunun – Selvin

cevap

0

Bunun nedeni, verilerinizi yalnızca bir görünüm öğesine yerleştirebilmesidir. Dolayısıyla, düzeninizde bir öğe belirtmeniz gerekir (sizin durumunuzda bir TextView). Bu gibi görünmek xml dosyanızı değiştirin:

<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

dokümantasyonunun textViewResourceId parametresini de kontrol edin, bir çeşit çözüm ancak Orada daha iyi – Selvin

+0

@Selvin var Daha iyi bir çözüm – Pooya

+0

Başka bir şey. ArrayAdapter yerine bir "BaseAdapter" kullanmak gibi. – Shark

1

değişiklik adaptör -

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

Teşekkürler Nirel, şimdi asıl sorunu anlıyorum. Belirli bir TextView'e başvurmalıyım. Bu nedenle, diğer önerilen çözüm (Pooya tarafından) da çalışır. – oetzi

İlgili konular