2013-02-20 22 views
28

Tôi muốn viết một ListView ở định dạng cơ bản nhưng tôi nhận được một lỗi:Không thể bắt đầu hoạt động: UnsupportedOperationException: addView (Xem, LayoutParams) không được hỗ trợ trong AdapterView

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

và:

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

Tôi biết điều gì đó nên được thực hiện ở đây trong lớp bộ điều hợp:

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; 

} 

Tôi nên làm gì để giải quyết những vấn đề

Các 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

Có vẻ như bạn không hiển thị cho chúng tôi phần quan trọng trong mã của bạn. addView trên AdapterView không được hỗ trợ, bởi vì AdapterView là loại cơ sở trừu tượng cho ListView, Gallery và vv. Xem: [link] (http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/android/widget/AdapterView.java). Có lẽ bạn chỉ nên sử dụng một ListView? – Zielony

+0

bạn có thể đăng mã đầy đủ của mình cho lớp bộ điều hợp này không? –

+0

đăng nhật ký đầy đủ của bạn – Shoshi

Trả lời

96

what should i do???

Đúng ma cua ban.

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

Một lớp con của AdapterView như một ListViewkhông thể có con bằng tay thêm hoặc trong file bố trí hoặc thêm vào trong mã. Vì vậy, nếu bạn có điều này trong một của bố cục:

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

không làm điều đó, vì điều này sẽ gọi phương thức addView của ListView, ném ngoại lệ. Thay vì sử dụng:

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

Bạn cũng không thể sử dụng bất kỳ phương pháp addViewListView trong mã như thế này:

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

Ngoài ra, nếu bạn sử dụng phương pháp LayoutInflater.inflate trong mã của Activity hoặc bộ điều hợp (phương pháp getView), không vượt qua thông số thứ hai là ListView. Ví dụ, không sử dụng:

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

như trong câu trả lời Tamilarasi Sivaraj như rằng sẽ ném ngoại lệ một lần nữa. Thay vì sử dụng:

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

liên quan đến ngoại trừ bạn được đăng trong câu hỏi, dường như bạn sử dụng phương pháp setText với một int (một trong những s hoặc i mảng là một mảng int). Vấn đề là trong trường hợp này, TextView sẽ cho rằng bạn đang cố gắng đặt văn bản bằng cách sử dụng tài nguyên chuỗi như thế này R.string.astring. Các int bạn vượt qua không phải là một nguồn tài nguyên chuỗi vì vậy một ngoại lệ sẽ được ném.Nếu s hoặc i là một int và bạn đang cố gắng để hiển thị nó trong TextView sử dụng này để thay thế:

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

cảm ơn ... phân tích tuyệt vời !!! – elegance

+5

+1 cho "Ngoài ra, nếu bạn sử dụng phương thức LayoutInflater.inflate trong mã của Hoạt động hoặc bộ điều hợp (phương thức getView của nó), đừng chuyển ListView làm tham số thứ hai" –

+0

Dường như điều này áp dụng cho GridView là tốt. :( – Thom

5

Thay thế bố trí của bạn trong inflater

@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, điều này đã không giúp tôi ra ngoài .. – elegance

1

Hãy thử điều này Như thế này:

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, tôi có nên đặt chế độ xem t và xem img của tôi ở vị trí của chế độ xem con không ??? – elegance

+0

có bạn đặt chế độ xem văn bản và hình ảnh của bạn ở chế độ xem con và đề cập đến tên bố cục trong LayoutInflater ... nếu bạn có bất kỳ thắc mắc nào hỏi tôi –

+0

Tamilarasi Sivaraj, tôi không hiểu bạn khi nào [groupPosition] [childPosition] ??? – elegance

1

Nếu bạn đang như tôi và hoàn toàn bỏ qua câu trả lời tôi cần thiết trong @ câu trả lời Luksprog vì nó chôn trong đó, hãy thử sử dụng thêm tham số thứ ba với phương pháp inflate, cũng đề cập đến here:

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

không sử dụng true thay vì false hoặc bạn sẽ nhận được lỗi tương tự đã đưa các bạn ở đây, bởi vì nó' s cố gắng đính kèm/thêm nó vào phụ huynh, do đó lỗi addView is not supported in AdapterView.

Các vấn đề liên quan