如何在材质对话框中删除多个按钮表单视图在android中?

时间:2017-03-02 09:26:59

标签: android android-layout button dialog onclicklistener

当我从材质对话框的UI中删除第一个按钮时。但是,它从UI中删除了最后一个按钮。我想从UI中删除多个按钮。每次点击一次按钮事件后。

layout2 = (LinearLayout) dialog.getCustomView().findViewById(R.id.layoutDisplayTags);
layout2.setOrientation(LinearLayout.VERTICAL); 
layout2.setWeightSum(1);
layout2.removeAllViews();
layout2.invalidate();


float rowneed = ((float) count2 / 5);
k = 0;
for (int i = 0; i < ceil(rowneed); i++) {
row2 = new LinearLayout(getContext());
row2.setLayoutParams(new LinearLayout.LayoutParam(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));
row2.removeAllViews();
row2.invalidate();
 for (int j = 0; j < 5; j++) 
{
   btnTag2 = new Button(getContext());
   btnTag2.setHeight(15);
   btnTag2.setWidth(0);
   btnTag2.setMinimumWidth(155);
   btnTag2.setMinimumHeight(135);

      if (k < count2)
         {
             if (AllExpenseTagArray.size() != 0)
                {
                  btnTag2.setText(AllExpenseTagArray.get(k).getTagName());
                  btnTag2.setId(k);
                  btnTag2.setGravity(View.TEXT_ALIGNMENT_CENTER);
                  Drawable image = ContextCompat.getDrawable(getContext(), R.drawable.ic_close_black_18dp);
                  image.setBounds(1, 3, 25, 25);
                  btnTag2.setCompoundDrawables(null, null, image, null);
                  k++;
                  btnTag2.setVisibility(View.VISIBLE);
                }
             else {
                    btnTag2.setVisibility(View.INVISIBLE);
                    }
                 } 
         else {
                 btnTag2.setVisibility(View.INVISIBLE);
               }
               btnTag2.setTextSize(7);
               row2.addView(btnTag2);
             }

              layout2.addView(row2);
              layout2.invalidate();

 }

此代码无效

for (int id = 0; id < AllExpenseTagArray.size(); id++)
  {
     btnTag2 = (Button) dialog.getCustomView().findViewById(id);
     final int finalId = id;
     final int finalId1 = id;
     btnTag2.setOnClickListener(new View.OnClickListener() 
         {
            public void onClick(View view) 
               {
                    btnTag2.setVisibility(View.GONE);  
                    deleteId = AllExpenseTagArray.get(finalId1).getTagId();
               }                                                                                                                                        
         });

2 个答案:

答案 0 :(得分:0)

btnTag2侦听器中的

onClick引用一个全局变量,对于您正在创建的所有侦听器都是相同的,并且只是您创建的最后一个Button - 这就是为什么您正在看你所看到的。 view侦听器的onClick参数是Button,因此您可以进行以下更改,以便在单击按钮时消失。

        for (int id = 0; id < AllExpenseTagArray.size(); id++) {
        btnTag2 = (Button) dialog.getCustomView().findViewById(id);
        final int finalId = id;
        final int finalId1 = id;
        btnTag2.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                view.setVisibility(View.GONE); // Make this change
                deleteId = AllExpenseTagArray.get(finalId1).getTagId();
            }
        });
    }

答案 1 :(得分:0)

btnTag2是一个全局变量,当循环继续时它会被更新,所以当你点击时你有最后一个值。