处理点击动态创建布局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的子布局的主要内容,如果未能解决你的问题,请参考以下文章

android 动态设置布局宽度

如何在 Android 中保存(用户创建的)动态布局?

当项目具有动态高度时,如何根据设备方向创建动态颤动网格布局

在Android中,如何保存“动态创建的布局”并在我重新打开应用程序时重新加载?

Android之根布局动态载入子布局时边距设置无效问题

将自定义组件小部件动态添加到 Android 中的布局中