web-dev-qa-db-fra.com

Impossible de démarrer l'activité: UnsupportedOperationException: addView (View, LayoutParams) n'est pas pris en charge dans AdapterView

Je veux écrire un ListView au format de base mais j'obtiens une erreur:

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

et:

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

Je sais que quelque chose doit être fait ici dans la classe d'adaptateur:

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;

}

Que dois-je faire pour résoudre les problèmes

Le 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)
38
elegance

que devrais-je faire???

Corrigez votre code.

UnsupportedOperationException: addView (View, LayoutParams) n'est pas pris en charge dans AdapterView

Une sous-classe de AdapterView comme un ListViewne peut pas avoir des enfants ajoutés manuellement soit dans le fichier de mise en page, soit ajoutés dans le code. Donc, si vous avez cela dans l'une de vos dispositions:

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

ne le faites pas, car cela appellera la méthode addView de ListView, lançant l'exception. Utilisez plutôt:

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

Vous aussi ne pouvez pas utiliser l'une des méthodes addView de ListView dans un code comme celui-ci:

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

De plus, si vous utilisez le LayoutInflater.inflate méthode dans le code de Activity ou de l'adaptateur (sa méthode getView), ne pas passer le ListView comme deuxième paramètre . Par exemple, ne pas utiliser:

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

comme dans la réponse de Tamilarasi Sivaraj car cela lèvera à nouveau l'exception. Utilisez plutôt:

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

En relation avec l'exception que vous avez publiée dans la question, il semble que vous utilisiez la méthode setText avec un int (l'un des tableaux s ou i étant un int tableau). Le problème est que dans ce cas, TextView pensera que vous essayez de définir le texte en utilisant une ressource de chaîne comme celle-ci R.string.astring. Le int que vous passez n'est pas une ressource de chaîne, donc une exception sera levée. Si s ou i est un int et que vous essayez de l'afficher dans le TextView utilisez plutôt ceci:

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

Remplacez votre disposition dans le gonfleur

 @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;
}
6
Sanket Pandya

Si vous êtes comme moi et que vous avez totalement ignoré la réponse dont j'avais besoin dans la réponse de @ Luksprog parce qu'elle est enterrée, essayez d'ajouter le troisième paramètre à la méthode inflate, également mentionnée ici :

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

N'utilisez pas true au lieu de false ou vous obtiendrez la même erreur qui vous a amené ici, car il essaie de l'attacher/l'ajouter au parent, d'où le addView is not supported in AdapterView Erreur.

5
craned

Essayez ceci comme ceci:

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;
    }
}
1
Android_coder