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)
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 ListView
ne 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
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;
}
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.
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;
}
}