处理点击动态创建布局android的子布局
Posted
技术标签:
【中文标题】处理点击动态创建布局android的子布局【英文标题】:Handle click on child layout of dynamically created layout android 【发布时间】:2021-04-10 12:16:56 【问题描述】:你好开发人员我正在制作一个动态视图,我在其中添加了一个文本视图和一个图像视图,并在单击图像视图时应该删除布局。但问题是,当我单击布局的子级时,需要单击两次才能删除。
任何帮助将不胜感激。
布局代码是:
LinearLayout a = new LinearLayout(mContext);
a.setOrientation(LinearLayout.HORIZONTAL);
TextView itemNameTV = new TextView(mContext);
itemNameTV.setLayoutParams(lparams);
itemNameTV.setText(myInventoryItemRs.getQuantity());
ImageView delete = new ImageView(mContext);
itemNameTV.setLayoutParams(lparams);
delete.setImageDrawable(ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.ic_close, null));
holder.item_quantity_editText.setText("");
myInventoryItemRs.setQuantity("");
a.addView(itemNameTV);
a.addView(delete);
holder.add_more_items.addView(a);
点击更多项目的监听器
moreItems.setOnClickListener(v ->
try
// On first click this is called.
Toast.makeText(mContext, "Layout outer", Toast.LENGTH_SHORT).show();
int count = moreItems.getChildCount();
Log.e(TAG, "onClick: " + count);
View nv;
for (int i = 0; i < count; i++)
try
nv = moreItems.getChildAt(i);
ImageView delete = (ImageView) ((LinearLayout) nv).getChildAt(1);
View finalNv1 = nv;
delete.setOnClickListener(v1 ->
// On Second click this is called.
Toast.makeText(mContext, "Layout inner", Toast.LENGTH_SHORT).show();
moreItems.removeView(finalNv1);
);
TextView tnv = (TextView) ((LinearLayout) nv).getChildAt(0);
catch (Exception e)
Log.e(TAG, "onClick: " + e);
catch (Exception e)
Log.e(TAG, "onClick: " + e);
);
【问题讨论】:
【参考方案1】:如果你的视图结构看起来像它 https://i.stack.imgur.com/p7JAE.png
您可以在创建每个 ImageView 时设置 OnClickListener。像这样。
delete.setOnClickListener(view ->
((ViewGroup)view.getParent().getParent()).removeView((View) view.getParent())
);
这不是最好的决定,但应该可行
【讨论】:
以上是关于处理点击动态创建布局android的子布局的主要内容,如果未能解决你的问题,请参考以下文章