2013-02-20 19 views
28

支持我想寫的基本格式ListView但我得到一個錯誤:無法啓動活動:UnsupportedOperationException異常:addView(查看,的LayoutParams)沒有在適配器視圖

UnsupportedOperationException: addView(View, LayoutParams) is not supported in AdapterView 

和:

androidview.LayoutInfalater.inflate(LayoutInflater.java: some numbers....like 720,658...so on) 

我知道的東西應該在這裏的適配器類來完成:

public View getView(int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 
    RelativeLayout rv = new RelativeLayout(c); 

    TextView tv = new TextView(c); 
    TextView tv1 = new TextView(c); 
    ImageView imgv = new ImageView(c); 

    tv.setText(s[position]); 
    tv1.setText(i[position]); 
    imgv.setImageResource(d[position]); 

    rv.addView(tv); 
    rv.addView(tv1); 
    rv.addView(imgv); 
    return rv; 

} 

我應該怎麼做才能解決問題

的logcat的:

02-20 16:40:24.967: E/Trace(1715): error opening trace file: No such file or directory (2) 
02-20 16:40:25.819: W/ResourceType(1715): No package identifier when getting value for resource number 0x000020d0 
02-20 16:40:25.819: D/AndroidRuntime(1715): Shutting down VM 
02-20 16:40:25.819: W/dalvikvm(1715): threadid=1: thread exiting with uncaught exception (group=0x40a13300) 
02-20 16:40:25.857: E/AndroidRuntime(1715): FATAL EXCEPTION: main 
02-20 16:40:25.857: E/AndroidRuntime(1715): android.content.res.Resources$NotFoundException: String resource ID #0x20d0 
02-20 16:40:25.857: E/AndroidRuntime(1715):  at android.content.res.Resources.getText(Resources.java:229) 
02-20 16:40:25.857: E/AndroidRuntime(1715):  at android.widget.TextView.setText(TextView.java:3620) 
02-20 16:40:25.857: E/AndroidRuntime(1715):  at com.example.systemzap2.adapt.getView(adapt.java:59) 
02-20 16:40:25.857: E/AndroidRuntime(1715):  at android.widget.AbsListView.obtainView(AbsListView.java:2271) 
02-20 16:40:25.857: E/AndroidRuntime(1715):  at android.widget.ListView.measureHeightOfChildren(ListView.java:1244) 
02-20 16:40:25.857: E/AndroidRuntime(1715):  at android.widget.ListView.onMeasure(ListView.java:1156) 
02-20 16:40:25.857: E/AndroidRuntime(1715):  at android.view.View.measure(View.java:15172) 
02-20 16:40:25.857: E/AndroidRuntime(1715):  at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:617) 
02-20 16:40:25.857: E/AndroidRuntime(1715):  at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:399) 
02-20 16:40:25.857: E/AndroidRuntime(1715):  at android.view.View.measure(View.java:15172) 
02-20 16:40:25.857: E/AndroidRuntime(1715):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816) 
02-20 16:40:25.857: E/AndroidRuntime(1715):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
02-20 16:40:25.857: E/AndroidRuntime(1715):  at android.view.View.measure(View.java:15172) 
02-20 16:40:25.857: E/AndroidRuntime(1715):  at android.widget.LinearLayout.measureVertical(LinearLayout.java:833) 
02-20 16:40:25.857: E/AndroidRuntime(1715):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:574) 
02-20 16:40:25.857: E/AndroidRuntime(1715):  at android.view.View.measure(View.java:15172) 
02-20 16:40:25.857: E/AndroidRuntime(1715):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4816) 
02-20 16:40:25.857: E/AndroidRuntime(1715):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
02-20 16:40:25.857: E/AndroidRuntime(1715):  at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2148) 
02-20 16:40:25.857: E/AndroidRuntime(1715):  at android.view.View.measure(View.java:15172) 
02-20 16:40:25.857: E/AndroidRuntime(1715):  at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1850) 
02-20 16:40:25.857: E/AndroidRuntime(1715):  at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1102) 
02-20 16:40:25.857: E/AndroidRuntime(1715):  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1275) 
02-20 16:40:25.857: E/AndroidRuntime(1715):  at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000) 
02-20 16:40:25.857: E/AndroidRuntime(1715):  at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4214) 
02-20 16:40:25.857: E/AndroidRuntime(1715):  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725) 
02-20 16:40:25.857: E/AndroidRuntime(1715):  at android.view.Choreographer.doCallbacks(Choreographer.java:555) 
02-20 16:40:25.857: E/AndroidRuntime(1715):  at android.view.Choreographer.doFrame(Choreographer.java:525) 
02-20 16:40:25.857: E/AndroidRuntime(1715):  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711) 
02-20 16:40:25.857: E/AndroidRuntime(1715):  at android.os.Handler.handleCallback(Handler.java:615) 
02-20 16:40:25.857: E/AndroidRuntime(1715):  at android.os.Handler.dispatchMessage(Handler.java:92) 
02-20 16:40:25.857: E/AndroidRuntime(1715):  at android.os.Looper.loop(Looper.java:137) 
02-20 16:40:25.857: E/AndroidRuntime(1715):  at android.app.ActivityThread.main(ActivityThread.java:4745) 
02-20 16:40:25.857: E/AndroidRuntime(1715):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-20 16:40:25.857: E/AndroidRuntime(1715):  at java.lang.reflect.Method.invoke(Method.java:511) 
02-20 16:40:25.857: E/AndroidRuntime(1715):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
02-20 16:40:25.857: E/AndroidRuntime(1715):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
02-20 16:40:25.857: E/AndroidRuntime(1715):  at dalvik.system.NativeStart.main(Native Method) 
+0

好像你沒有向我們展示你的代碼的重要部分。不支持AdapterView上的addView,因爲AdapterView是ListView,Gallery等的抽象基礎。請參閱:[鏈接](http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/android/widget/AdapterView.java)。也許你應該只使用ListView? – Zielony 2013-02-20 11:12:30

+0

你可以發佈這個適配器類的完整代碼嗎? – 2013-02-20 11:13:45

+0

發佈您的完整logcat – Shoshi 2013-02-20 11:15:42

回答

96

what should i do???

正確你的代碼。

UnsupportedOperationException: addView(View, LayoutParams) is not supported in AdapterView

AdapterViewListView子類可以不生子手動要麼在佈局文件中添加或在代碼加入。所以,如果你有這樣的在你的佈局之一:

<ListView // .. other attributes> 
    <// other views <-- notice the children of the ListView tag 
</ListView> 

不這樣做,因爲這將調用ListViewaddView方法,拋出異常。而是使用:

<ListView // .. other attributes /> 
< // other views 

不能使用任何的ListViewaddView方法,像這樣的代碼:

listViewReference.addView(anotherView); // <-- don't do it 

另外,如果你在的代碼中使用的LayoutInflater.inflate方法Activity或適配器(其getView方法),不通過ListView作爲第二個參數。在Tamilarasi Sivaraj的回答

convertView = inflator.inflate(R.layout.child_rows, parent); 

因爲作爲將再次引發異常:例如,不要使用。改用:

convertView = inflator.inflate(R.layout.child_rows, parent, false); 

相關您在問題貼例外,它顯示使用setText方法與int(所述si陣列作爲一個int陣列中的一個)。問題是,在這種情況下,TextView會認爲您正在嘗試使用像這樣的字符串資源設置文本,如R.string.astring。您傳遞的int不是字符串資源,因此會引發異常。如果siint而你試圖證明它在TextView用這個代替:

tv.setText(String.valueOf(s[position])); // assuming s is the int array 
+0

謝謝你......精湛的分析! 「 – elegance 2013-02-20 12:17:30

+5

+1」另外,如果您在Activity或適配器(它的getView方法)的代碼中使用LayoutInflater.inflate方法,請不要通過ListView作爲第二個參數「 – 2014-08-06 11:05:08

+0

看起來像這適用於GridView好。 :( – Thom 2016-11-05 12:22:55

5

在吹氣替換佈局

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 

    if (convertView == null) { 

     LayoutInflater inflater = (LayoutInflater) LayoutInflater 
       .from(contex); 
     convertView = inflater.inflate(R.layout.your_layout, parent, false); 

    } 

    txtName = (TextView) convertView.findViewById(R.id.txtName); 
    txtName.setText(""+ContactsArr.get(position).get("ContName")); 
    txtPhoneNumber = (TextView) convertView.findViewById(R.id.txtContact); 
    txtPhoneNumber.setText(""+ContactsArr.get(position).get("ContPhone")); 

    return convertView; 
} 
+0

Sanket Pandya,這並沒有幫助我.. – elegance 2013-02-20 11:22:10

1

試試這個像這樣:

public static class ViewHolder { 
    public ImageView imageView; 
    public TextView textView; 

    public View getView(int position, View convertView, ViewGroup parent) { 
     try{ 
      ViewHolder holder; 

      if (convertView == null) { 
       holder = new ViewHolder(); 
       LayoutInflater inflater = context1.getLayoutInflater(); 
       convertView = inflater.inflate(R.layout.your_layout, null,true); 

       holder.imageView = (ImageView) convertView.findViewById(R.id.imgview); 

       holder.textView = (TextView) convertView.findViewById(R.id.txtview); 

       convertView.setTag(holder); 
      } else { 
       holder = (ViewHolder) convertView.getTag(); 
      } 

      holder.textView.setText("your text"); 
      holder.imageView.setImageResource("your image resource"); 
     } catch (Exception e) { 
      System.out.println("Error: "+e);  
     } 

     return convertView; 
    } 
} 
+0

Tamilarasi Sivaraj,我應該把我的tex視圖和img視圖在兒童視圖的地方? – elegance 2013-02-20 11:23:28

+0

是的,你把你的textview和圖像視圖在子視圖中,並提及佈局名稱在LayoutInflater ...如果您有任何疑問問我 – 2013-02-20 11:26:25

+0

Tamilarasi Sivaraj,我沒有得到你當你的意思[groupPosition] [childPosition] ??? – elegance 2013-02-20 11:30:54

1

如果你像我一樣,完全跳過我需要@ Luksprog的答案的答案,因爲它埋在裏面,嘗試使用添加第三個參數inflate方法,還提到here

inflater.inflate(R.layout.group_row, parent, false); 

不要使用true代替false或者你會得到風把你吹來了同樣的錯誤,因爲它」試圖將其附加/添加到父級,因此addView is not supported in AdapterView錯誤。

相關問題