android - 无法删除线性布局中的所有按钮 deleteAllButtons 不起作用

标签 android

我编写了以下应用程序,其中显示了 3 x 4 的按钮网格,用户可以通过单击菜单项来更改网格尺寸。问题在于,当用户单击其中一项时,之前的按钮不会消失,“deleteAllButtons”功能似乎不起作用。谁能告诉我为什么他们不离开以及我该如何解决这个问题?谢谢。

package com.example.myapplication;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.LinearLayout;

public class MainActivity extends AppCompatActivity {

    private static final int MENU_ITEM_ITEM1 = 1;
    LinearLayout.LayoutParams params;
    LinearLayout linearLayout;
    int _row;
    int column;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        linearLayout = new LinearLayout(this);
        linearLayout.setOrientation(LinearLayout.VERTICAL);  //Can also be done in xml by android:orientation="vertical"
        params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT);
        params.weight = 1.0f;
        params.gravity = Gravity.TOP;
        //layout.setBackgroundColor(0xFFFFFFFF);
        _row=3;
        column=4;
        update();
    }

    public void deleteAllButtons(){
        for (int i = 0; i < _row; i++){
            for (int j = 0; j < column; j++){
                linearLayout.removeView(findViewById(j + 1 + (i * column)));
            }
        }

    }

    public void update(){
        for (int i = 0; i < _row; i++) {
            LinearLayout row = new LinearLayout(this);
            row.setLayoutParams(params);

            for (int j = 0; j < column; j++) {
                Button btnTag = new Button(this);
                btnTag.setLayoutParams(params);
                btnTag.setText("Button " + (j + 1 + (i * column)));
                btnTag.setId(j + 1 + (i * column));
                if ((i+j) % 2 == 0) {
                    btnTag.setBackgroundColor(0xFFFF0000);
                } else {
                    btnTag.setBackgroundColor(0x00000000);
                }
                btnTag.setBackgroundResource(R.drawable.ic_android_black_24dp);
                row.addView(btnTag);
            }
            linearLayout.addView(row);
        }

        setContentView(linearLayout);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        menu.add(Menu.NONE, MENU_ITEM_ITEM1, Menu.NONE, "Item name");
        menu.add(Menu.NONE, 2, Menu.NONE, "Item name");
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case MENU_ITEM_ITEM1:
                _row=4;
                column=5;
                deleteAllButtons();
                update();
                return true;
            case 2:
                _row=6;
                column=3;
                deleteAllButtons();
                update();
            default:
                return false;
        }
    }
}

最佳答案

在调用 deleteAllButtons 之前,您正在更新 onOptionsItemSelected 中的 _rowcolumn 值,但是您使用这些值删除 deleteAllButtons 函数中的按钮,将其更新为:

switch (item.getItemId()) {
    case MENU_ITEM_ITEM1:
        deleteAllButtons();
        _row=4;
        column=5;
        update();
        return true;
    case 2:
        deleteAllButtons();
        _row=6;
        column=3;
        update();
    default:
        return false;
}

更新

看起来你在 LinearLayout 中只有按钮,你想删除所有按钮,你可以这样做:

public void deleteAllButtons(){
    linearlayout.removeAllViews();
}

而不是单独循环和删除它们。

关于android - 无法删除线性布局中的所有按钮 deleteAllButtons 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47080069/

相关文章:

java - 如何删除安卓通知?

android - 什么是最好的应用程序架构?

java - Android:对象包含类 ID

Android:在 Nougat 中截取整个 WebView 的屏幕截图(Android 7)

android - JakeWharton 的 DiskLruCache 示例

android - 来自 res/values/strings.xml 的字符串未显示在我的代码中使用

android - 如何缩放图像边缘以填充android中的背景?

Android Alert Dialog - 如何在不更改原色的情况下更改标题颜色和文本颜色

android - 绘制带有纹理的正方形后未绘制 TRIANGLE_FAN 圆

android - 在 onChildClick() 方法之外的 Expandable ListView Android 中更改被点击子项的背景颜色