Android 键盘是否会触发某种触发?我的表格布局仅在键盘显示时更新

Android 键盘是否会触发某种触发?我的表格布局仅在键盘显示时更新,android,keyboard,tablelayout,Android,Keyboard,Tablelayout,我正在开发一个Android应用程序。这个应用程序是关于一个象棋游戏的。用户可以通过AlertDialog.Builder输入棋盘的宽度和高度。奇怪的是:当点击OK按钮时,键盘仍在显示,棋盘正在完美地更新。但在键盘未显示时单击OK时,棋盘不会更新。棋盘是一种桌面布局。行是以编程方式创建的。我将用图片演示这个问题: 这是AlertDialog.Builder,不显示键盘: 结果是TableLayout没有显示任何内容: 这是显示键盘的AlertDialog.Builder: 现在,桌面布局正

我正在开发一个Android应用程序。这个应用程序是关于一个象棋游戏的。用户可以通过AlertDialog.Builder输入棋盘的宽度和高度。奇怪的是:当点击OK按钮时,键盘仍在显示,棋盘正在完美地更新。但在键盘未显示时单击OK时,棋盘不会更新。棋盘是一种桌面布局。行是以编程方式创建的。我将用图片演示这个问题:

这是AlertDialog.Builder,不显示键盘:

结果是TableLayout没有显示任何内容:

这是显示键盘的AlertDialog.Builder:

现在,桌面布局正完美地显示出来:

这是自定义tablerow类:

public class TableRowChess extends TableRow {

private Context context;

private int numberOfColumns;
private int rowNumber;

private String[][] solution;

public TableRowChess(Context context, int numberOfColumns, int rowNumber, String[][] solution) {
    super(context);

    this.context = context;
    this.numberOfColumns = numberOfColumns;
    this.rowNumber = rowNumber;
    this.solution = solution;

    initializeTableRow();
    initializeTextViews();
}


private void initializeTableRow(){
    this.setLayoutParams(new TableRow.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, (float) numberOfColumns));
}

private void initializeTextViews(){
    TableRow.LayoutParams  params = new TableRow.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1.0f);

    for(int i = 0; i < numberOfColumns; i ++){
        SquareTextView tv = new SquareTextView(context);

        tv.setLayoutParams(params);
        tv.setGravity(Gravity.CENTER);
        tv.setBackgroundResource(getCorrectBackground(i));
        tv.setHeight(tv.getLayoutParams().width);
        tv.setText(solution[rowNumber][i]);
        tv.setTextAppearance(context, android.R.style.TextAppearance_Medium);
        tv.setTypeface(null, Typeface.BOLD);

        this.addView(tv);
    }
}

private int getCorrectBackground(int columnNumber){
    if((rowNumber % 2) == 0){
        if((columnNumber % 2) == 0){
            return R.drawable.square_white;
        } else {
            return R.drawable.square_brown;
        }
    } else {
        if((columnNumber % 2) == 0){
            return R.drawable.square_brown;
        } else {
            return R.drawable.square_white;
        }
    }
}
}
公共类TableRowChess扩展了TableRow{
私人语境;
私有整数列;
私有整数行数;
私有字符串[][]解决方案;
公共TableRowChess(上下文上下文、int-numberOfColumns、int-rowNumber、字符串[][]解决方案){
超级(上下文);
this.context=上下文;
this.numberOfColumns=numberOfColumns;
this.rowNumber=rowNumber;
这个解决方案=解决方案;
initializeTableRow();
initializeTextViews();
}
private void initializeTableRow(){
this.setLayoutParams(新的TableRow.LayoutParams(LayoutParams.MATCH_父项,LayoutParams.MATCH_父项,(float)numberOfColumns));
}
私有void initializeTextViews(){
TableRow.LayoutParams params=新建TableRow.LayoutParams(0,ViewGroup.LayoutParams.WRAP_内容,1.0f);
for(int i=0;i
这是单击“确定”按钮时调用的代码:

private void setupChessBoard(){
    tableLayout.removeAllViews();

    String[][] solution = new Algorithm(dimensionsDialog.getHeight(), dimensionsDialog.getWidth(), dimensionsDialog.getNumberOfQueens(), dimensionsDialog.getNumberOfBishops()).getSolution();

    for(int i = 0 ; i < dimensionsDialog.getHeight(); i ++){
        tableLayout.addView(new TableRowChess(this, dimensionsDialog.getWidth(), i, solution));
    }
}
私人棋盘(){
tableLayout.removeallview();
字符串[][]解=新算法(dimensionsDialog.getHeight()、dimensionsDialog.getWidth()、dimensionsDialog.getNumberOfQueens()、dimensionsDialog.getNumberOfBishops()).getSolution();
对于(int i=0;i
我不明白为什么当键盘显示时代码可以工作,为什么当它不显示时代码不能工作。我看不到这里的关系?还是代码中有什么错误

我希望有人能帮助我!谢谢