Android:根据用户输入动态创建editText的矩阵?

问题描述:

我是android开发新手。我注意到了一些类似的问题,但他们都没有真正回答我的问题,以至于我可以弄明白,否则他们依赖于折旧的功能。Android:根据用户输入动态创建editText的矩阵?

到目前为止,我创建了我的主课程。我想开到一个画面,让用户输入他们想要减少

public class MainActivity extends AppCompatActivity { 

public int numberOfRows; 
public int numberOfColumns; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 

public void setRows(View v3) { 
    EditText editTextRow = (EditText) findViewById(R.id.editText2); 
    if ("".equals(editTextRow.getText())) { 
    } 
    else { 
     numberOfRows = Integer.parseInt(editTextRow.getText().toString()); 
    } 
} 

public void setColumns(View v2) { 
    EditText editTextCol = (EditText) findViewById(R.id.editText3); 
    if ("".equals(editTextCol.getText())) { 
     numberOfRows = Integer.parseInt(editTextCol.getText().toString()); 
    } 
} 

public void reduce(View view){ 
    if(numberOfRows != 0 && numberOfColumns != 0) { 
    } 
    else { 
     Intent intent = new Intent(this, ReduceMatrix.class); 
     Bundle bundle = new Bundle(); 
     bundle.putInt("rows", numberOfRows); 
     bundle.putInt("cols", numberOfColumns); 
     intent.putExtras(bundle); 

     startActivity(intent); 
    } 
} 

} 

我有想出下一个活动,在这里我想麻烦动态矩阵的行和列的长度两个数字创建一个editText矩阵...

public class ReduceMatrix extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_reduce_matrix); 


    Intent passedIntent = getIntent(); 
    Bundle extras = passedIntent.getExtras(); 

    int rowNum = extras.getInt("rows"); 
    int colNum = extras.getInt("cols"); 

任何人都可以解释如何去做到这一点?我正在考虑某种循环,但我对android布局非常困难。我应该使用tableLayout吗?或gridview?每当我有类似的东西

layout = new LinearLayout(this); 

它告诉我,我的限定词必须在表达式?

您需要以编程方式添加它。这是我的解决方案:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    Intent passedIntent = getIntent(); 
    Bundle extras = passedIntent.getExtras(); 

    EditText[][] editTexts = new EditText[rowNum][colNum]; 

    GridLayout gridLayout = new GridLayout(this); 

    //define how many rows and columns to be used in the layout 
    gridLayout.setRowCount(rowNum); 
    gridLayout.setColumnCount(colNum); 

    for (int i = 0; i < rowNum; i++) { 
     for (int j = 0; j < colNum; j++) { 
      editTexts[i][j] = new EditText(this); 
      setPos(editTexts[i][j], i, j); 
      gridLayout.addView(editTexts[i][j]); 
     } 
    } 
    setContentView(gridLayout); 
} 

//putting the edit text according to row and column index 
private void setPos(EditText editText, int row, int column) { 
    GridLayout.LayoutParams param =new GridLayout.LayoutParams(); 
    param.width = 100; 
    param.height = 100; 
    param.setGravity(Gravity.CENTER); 
    param.rowSpec = GridLayout.spec(row); 
    param.columnSpec = GridLayout.spec(column); 
    editText.setLayoutParams(param); 
} 

这将使您能够动态添加EditText(s)。

+0

谢谢。我的xml文件应该是什么样子?我应该有一个空的gridLayout吗?目前这个编译,但运行应用程序时没有任何东西可见 – JVandeve

+0

@JVandeve你不需要一个xml文件,因为这段代码做的是以编程方式创建布局。所以,你不需要为布局创建一个xml文件。那么,你能告诉我更多关于“什么都看不见”的吗?你的意思是没有显示活动(看起来像应用程序没有启动)?如果是,那么你需要在'AndroidManifest.xml'文件中为你的活动添加一个意图过滤器。 –