代码之家  ›  专栏  ›  技术社区  ›  rawsly

Android以编程方式创建表

  •  4
  • rawsly  · 技术社区  · 7 年前

    我试图用给定的行数和列数生成一个数字表。该程序从用户那里获取两个参数,并使用给定参数创建一个表行和列。每个单元格将有一个介于1到100之间的随机数值。 到目前为止,我用两个不同的EditText视图对XML进行了编码,这两个视图将成为我的参数。我将使用四个按钮“创建”、“计算”、“重置”、“退出”。当用户单击“创建”按钮时,将使用给定的行和列值生成表。因此,我必须从java文件而不是XML文件创建表。

    这是我目前的代码:

    public class MainActivity extends AppCompatActivity {
    
    private Button btnCreate, btnCalculate, btnReset, btnExit;
    private EditText txtColumn, txtRow;
    private LinearLayout linLayout;
    private TableLayout table;
    private TextView txtResult;
    private Random random;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        btnCreate = (Button) findViewById(R.id.btnCreate);
        btnCalculate = (Button) findViewById(R.id.btnCalculate);
        btnReset = (Button) findViewById(R.id.btnReset);
        btnExit = (Button) findViewById(R.id.btnExit);
    
        txtColumn = (EditText) findViewById(R.id.txtColumn);
        txtRow = (EditText) findViewById(R.id.txtRow);
        txtResult = (TextView) findViewById(R.id.txtResult);
        txtColumn.requestFocus();
    
        random = new Random();
    
        TableLayout table = new TableLayout(this);
    
        btnCalculate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
    
            }
        });
    
        btnCreate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                table.setLayoutParams(new TableLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
                table.setShrinkAllColumns(true);
                table.setStretchAllColumns(true);
                int columnNumber = Integer.parseInt(txtColumn.getText().toString());
                int rowNumber = Integer.parseInt(txtRow.getText().toString());
    
                for(int i=0; i<rowNumber; i++) {
                    TableRow row = new TableRow();
                    for(int j=0; i<columnNumber; i++) {
                        int value = random.nextInt(100) + 1;
                        TextView tv = new TextView();
                        tv.setText(String.valueOf(value));
                        row.addView(tv);
                    }
                    table.addView(row);
                }
            }
        });
    
        btnExit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                System.exit(0);
            }
        });
        btnReset.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                txtColumn.setText(null);
                txtRow.setText(null);
                txtResult.setText(null);
            }
        });
    }
    }
    

    我的“for”循环出错。它说“TableRow”必须在内部获取上下文参数。然而,我真的不明白它想要什么样的参数。我试图通过编程方式搜索表的创建,但到目前为止没有成功。我该如何修复这个错误?

    1 回复  |  直到 7 年前
        1
  •  9
  •   Tom Hanley    5 年前

    创建表行时需要传递上下文。尝试以下代码

    for (int i=0; i < rowNumber; i++) {
      TableRow row = new TableRow(MainActivity.this);
          for (int j=0; j < columnNumber; j++) {
            int value = random.nextInt(100) + 1;
            TextView tv = new TextView(MainActivity.this);
            tv.setText(String.valueOf(value));
            row.addView(tv);
          }
      table.addView(row);
    }
    

    您还需要将tablelayout添加到任何xml视图中,例如在xml文件中,添加如下所示的线性布局

    <LinearLayout 
        android:id="@+id/mainLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"/>
    

    在java文件中投射该视图,如下所示

    LinearLayout mainLayout = findViewById(R.id.mainLayout); 
    

    将表格布局添加到此视图,如下所示

    mainLayout.addView(table);