当我从材质对话框的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();
}
});
答案 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是一个全局变量,当循环继续时它会被更新,所以当你点击时你有最后一个值。