ListView
を基本形式で書きたいのですが、エラーが発生します:
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)
私は何をすべきか???
コードを修正してください。
UnsupportedOperationException:addView(View、LayoutParams)はAdapterViewではサポートされていません
AdapterView
のようなListView
のサブクラスca n'tは、レイアウトファイルまたはコードに子を手動で追加します。レイアウトの1つにこれがある場合:
<ListView // .. other attributes>
<// other views <-- notice the children of the ListView tag
</ListView>
しないでください、これはaddView
のListView
メソッドを呼び出し、例外をスローするためです。代わりに使用します:
<ListView // .. other attributes />
< // other views
また、できないこのようなコードでaddView
のListView
メソッドのいずれかを使用します。
listViewReference.addView(anotherView); // <-- don't do it
また、Activity
またはアダプター(そのgetView
メソッド)のコードでLayoutInflater.inflate
メソッドを使用する場合、渡さない the ListView
は2番目のパラメーターとして。たとえば、使用しない:
convertView = inflator.inflate(R.layout.child_rows, parent);
tamilarasi Sivarajの回答のように、例外が再びスローされます。代わりに使用します:
convertView = inflator.inflate(R.layout.child_rows, parent, false);
質問で投稿した例外に関連して、setText
(int
またはs
配列のいずれかでi
メソッドを使用しているようですint
配列)。問題は、この場合TextView
が、このR.string.astring
のような文字列リソースを使用してテキストを設定しようとしていると考えることです。渡すint
は文字列リソースではないため、例外がスローされます。 s
またはi
がint
であり、TextView
で表示しようとしている場合は、代わりにこれを使用します。
tv.setText(String.valueOf(s[position])); // assuming s is the int array
インフレータのレイアウトを交換します
@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;
}
あなたが私に似ていて、@ Luksprogの答えに埋もれているために必要な答えを完全にスキップした場合は、3番目のパラメーターをinflate
メソッドに追加してみてください here :
inflater.inflate(R.layout.group_row, parent, false);
true
の代わりにfalse
を使用しないでください。親にアタッチ/追加しようとしているため、ここに来たのと同じエラーが発生します。したがって、addView is not supported in AdapterView
エラー。
このようにしてみてください:
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;
}
}