2013-02-20 9 views
28

Ich mag ein ListView in grundlegendem Format schreiben, aber ich erhalte eine Fehlermeldung:Unable Aktivität zu starten: UnsupportedOperationException: addView (Ansicht, LayoutParams) nicht in AdapterView unterstützt

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

und:

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

ich weiß etwas hier in der Adapterklasse getan werden sollte:

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; 

} 

Was soll ich tun, um die Probleme

Die Logcat zu lösen:

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

Scheint so, als würden Sie uns nicht den wichtigen Teil Ihres Codes zeigen. addView auf AdapterView wird nicht unterstützt, da AdapterView eine Art abstrakte Basis für ListView, Gallery usw. ist. Siehe: [link] (http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/android/widget/AdapterView.java). Vielleicht sollten Sie einfach einen ListView verwenden? – Zielony

+0

können Sie Ihren vollständigen Code für diese Adapterklasse veröffentlichen? –

+0

posten Sie Ihre vollständige Logcat – Shoshi

Antwort

96

what should i do???

Correct dein Code.

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

Eine Unterklasse von AdapterView wie ein ListViewnicht haben Kinder manuell in Code entweder in der Layout-Datei oder hinzugefügt hinzugefügt. Also, wenn Sie diese haben in einem Ihrer Layouts:

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

tun es nicht, da dies die addView Methode der ListView nennen, werfen die Ausnahme. Stattdessen verwenden:

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

Sie können auch keine der addView Methoden der ListView in Code verwenden:

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

Auch, wenn Sie die LayoutInflater.inflate Methode im Code der Verwendung Activity oder der Adapter (seine getView Methode), nicht die ListView als zweiter Parameter übergeben. Zum Beispiel verwendet nicht:

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

wie in Tamilarasi Sivaraj Antwort als dass die Ausnahme wieder werfen. Stattdessen verwenden:

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

Bezogen auf die Ausnahme, die Sie in die Frage gestellt, es gibt Ihnen die setText Methode mit einem int (einer der s oder i Arrays ist ein int Array) verwenden erscheint. Das Problem ist, dass in diesem Fall TextView denken wird, dass Sie versuchen, den Text mit einer Zeichenfolge wie dieser Ressource R.string.astring festzulegen. Die übergebene int ist keine Zeichenfolgenressource, daher wird eine Ausnahme ausgelöst.Wenn s oder i ein int ist und Sie versuchen, es auf diese stattdessen in dem TextView Einsatz zeigen:

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

danke ... super Analyse !!! – elegance

+5

+1 für die "Auch, wenn Sie die LayoutInflater.inflate-Methode im Code der Aktivität oder den Adapter (seine getView-Methode), übergeben Sie nicht die ListView als zweiter Parameter" –

+0

Sieht so aus für GridView als Gut. :( – Thom

5

Ersetzen Sie Ihr Layout in 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, das hat mir nicht geholfen .. – elegance

1

Try this Like this:

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

Tamilara Sivaraj, soll ich meine tex t view und img view an die stelle der kind view ??? – elegance

+0

Ja, du legst deine Textansicht und Bildansicht in die Kinderansicht und nennst den Layoutnamen in LayoutInflater ... wenn du Fragen hast frage mich –

+0

Tamilara Sivaraj, ich bekomme dich nicht wenn du meinst [groupPosition] [childPosition] ??? – elegance

1

Wenn Sie wie ich sind und ausgelassen total über die Antwort, die ich @ Luksprog Antwort benötigen in, weil es begraben darin, versuchen, den dritten Parameter an die inflate Methode hinzufügen, auch here erwähnt:

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

nicht true statt false verwenden Sie oder Sie werden die gleichen Fehler, die Sie hierher gebracht, weil es s versucht, es an den Eltern anzuhängen/hinzuzufügen, daher der addView is not supported in AdapterView Fehler.

Verwandte Themen