同じ CustomAdapter を使用しているアクティビティに複数の ListView があります。私の CustomAdapter では、各 ListView で、条件にある ListView の単一の項目に画像を追加します。
Image On Click Listener (CustomAdapter 内) を管理し、カスタム AlertDialog を表示したいだけです。
しかし、この AlertDialog に ArrayList の内容を描画したいだけです
私はこの最初の解決策を見つけました: プログラムで LinearLayout を作成し、 Dictionary の ArrayList で埋めます
編集:ここにMyAdapterがあります(理解できるように、アダプターをよりシンプルにします):
class MyAdapter extends ArrayAdapter<Drink>
{
LayoutInflater inflat;
private ArrayList<Drink> items;
private String sousCategory;
public MyAdapter(Context context, ArrayList<Drink> objects)
{
super(context, R.layout.activity_sousboissons_list_item_elementsouscategorie, objects);
this.items = objects;
this.inflat = LayoutInflater.from(context);
this.sousCategory = objects.get(0).getType();
}
private class ViewHolder{
public TextView title;
public TextView prix;
public TextView desc;
public TextView size;
public ImageView img;
public LinearLayout ll;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
String currentKey = "";
ViewHolder holder = null;
Drink element = items.get(position);
if (convertView == null) {
holder = new ViewHolder();
convertView = inflat.inflate(R.layout.activity_sousboissons_list_item_elementsouscategorie, null);
holder.title = (TextView) convertView.findViewById(R.id.sousboissons_element_title);
holder.desc = (TextView) convertView.findViewById(R.id.sousboissons_element_desc);
holder.prix = (TextView) convertView.findViewById(R.id.sousboissons_element_prix);
holder.size = (TextView) convertView.findViewById(R.id.sousboissons_element_size);
if (element.getPrice().size() > 1){
EditText editT = new EditText(SousBoisson.this);
final AlertDialog.Builder alert = new AlertDialog.Builder(SousBoissonsActivity.this);
alert.setTitle(element.getName());
alert.setView(e);
holder.img.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
alert.show();
}
});
holder.ll.addView(holder.img);
}else{
}
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
if (element != null) {
// Here I'm setting all the Text Value of my Labels
}
}
return convertView;
}
}
うまく機能しますが、もう一度クリックするとエラーが発生します:
03-27 19:50:11.007: E/AndroidRuntime(5416): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
03-27 19:50:11.007: E/AndroidRuntime(5416): at android.view.ViewGroup.addViewInner(ViewGroup.java:3618)
03-27 19:50:11.007: E/AndroidRuntime(5416): at android.view.ViewGroup.addView(ViewGroup.java:3489)
03-27 19:50:11.007: E/AndroidRuntime(5416): at android.view.ViewGroup.addView(ViewGroup.java:3465)
03-27 19:50:11.007: E/AndroidRuntime(5416): at com.android.internal.app.AlertController.setupView(AlertController.java:402)
03-27 19:50:11.007: E/AndroidRuntime(5416): at com.android.internal.app.AlertController.installContent(AlertController.java:242)
03-27 19:50:11.007: E/AndroidRuntime(5416): at android.app.AlertDialog.onCreate(AlertDialog.java:336)
03-27 19:50:11.007: E/AndroidRuntime(5416): at android.app.Dialog.dispatchOnCreate(Dialog.java:351)
03-27 19:50:11.007: E/AndroidRuntime(5416): at android.app.Dialog.show(Dialog.java:256)
03-27 19:50:11.007: E/AndroidRuntime(5416): at android.app.AlertDialog$Builder.show(AlertDialog.java:932)
03-27 19:50:11.007: E/AndroidRuntime(5416): at azur.mobile.incomrestau.SousBoissonsActivity$MyAdapter$1.onClick(SousBoissonsActivity.java:189)
03-27 19:50:11.007: E/AndroidRuntime(5416): at android.view.View.performClick(View.java:4211)
03-27 19:50:11.007: E/AndroidRuntime(5416): at android.view.View$PerformClick.run(View.java:17267)
03-27 19:50:11.007: E/AndroidRuntime(5416): at android.os.Handler.handleCallback(Handler.java:615)
03-27 19:50:11.007: E/AndroidRuntime(5416): at android.os.Handler.dispatchMessage(Handler.java:92)
03-27 19:50:11.007: E/AndroidRuntime(5416): at android.os.Looper.loop(Looper.java:137)
03-27 19:50:11.007: E/AndroidRuntime(5416): at android.app.ActivityThread.main(ActivityThread.java:4898)
03-27 19:50:11.007: E/AndroidRuntime(5416): at java.lang.reflect.Method.invokeNative(Native Method)
03-27 19:50:11.007: E/AndroidRuntime(5416): at java.lang.reflect.Method.invoke(Method.java:511)
03-27 19:50:11.007: E/AndroidRuntime(5416): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
03-27 19:50:11.007: E/AndroidRuntime(5416): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
03-27 19:50:11.007: E/AndroidRuntime(5416): at dalvik.system.NativeStart.main(Native Method)
私は子供なので、彼を置き換えることはできないので、それは正常であると読んだことがあります..
alert.setAdapter
使う代わりに使おうと思ったalert.setView
けどわからない..
編集:問題は私のものではありませんholder.ll
..