我编写了以下应用程序,其中显示了 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
中的 _row
和 column
值,但是您使用这些值删除 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/