我的活动中有多个ListView(s)使用相同的CustomAdapter。 在我的CustomAdapter中,在每个ListView上,我将图像添加到ListView的单个项目中。
我只想管理Image On Click Listener(在我的CustomAdapter中)并显示自定义AlertDialog。
但我只想在这个AlertDialog上绘制一个ArrayList的内容
我找到了第一个解决方案:以编程方式创建一个LinearLayout并用我的DictionaryList of Dictionary
填充它编辑:这是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
..
答案 0 :(得分:0)
效果很好但是当我第二次点击它时出现错误:
IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
这似乎是问题界限:
holder.ll.addView(holder.img);
快速解决方法是检查img
是否已有父母,是否确实将其删除:
if(holder.img.getParent() != null)
((ViewGroup) holder.img.getParent()).removeView(holder.img);
holder.ll.addView(holder.img);
答案 1 :(得分:0)
哦,它使用我的img !!的OnClickListener中的删除视图
我刚补充说:
holder.img.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(e.getParent() != null)
((ViewGroup) e.getParent()).removeView(e);
alert.show();
}
});
:)谢谢,希望它能使用自定义布局而不是editText。