【问题标题】:Using addTextChangedListener() for getText from multiple EditText's inside a TableLayout使用 addTextChangedListener() 从 TableLayout 内的多个 EditText 获取 getText
【发布时间】:2018-07-31 10:56:45
【问题描述】:

我已经成功地以编程方式创建了一个 TableLayout,其中包含多个 TextViews 和 EditTexts。

我想要的:是在输入文本后从 EditTexts 中获取文本。

我的尝试: 是在我创建 TableLayout 的循环中使用 addTextChangedListener()。

我的问题是:我设法从创建的第一个 EditText(左上 EditText)中获取文本。但是在向其他 EditText 输入文本时,我无法从其他 EditText 获取文本。

问题: 将 addTextChangedListener() 添加到 TableLayout 中的多个 EditText 的正确过程是什么?按创建时间还是以后?如果以后 - 我怎样才能以最好的方式单独访问 EditTexts?

任何有关修复我的代码的建议将不胜感激。

public void inflateView(String[] names){

    tableLayout = (TableLayout)findViewById(R.id.table1);
    TableRow tableRow;
    TextView textView;
    EditText[][] eTxts = new EditText[names.length-1][rows.length-1];

    for (int i = 0; i < rows.length; i++) {
        tableRow = new TableRow(getApplicationContext());

        textView = new TextView(getApplicationContext());
        textView.setText(rows[i]);
        textView.setTextSize(20);
        textView.setId(i);
        textView.setPadding(20, 20, 20, 20);

        tableRow.addView(textView);

        if(i<1) {
            for (int j = 0; j < names.length; j++) {
                textView = new TextView(getApplicationContext());
                textView.setText(names[j]);
                textView.setTextSize(20);
                textView.setId(j);
                textView.setPadding(20, 20, 20, 20);

                tableRow.addView(textView);
            }
        }

        else{
            for (int j = 0; j < names.length; j++) {
                edit = new EditText(getApplicationContext());
                edit.setText("");
                edit.setTextSize(20);
                edit.setId(j);
                //eTxts[i][j] = edit;
                edit.setPadding(20, 20, 20, 20);
                final int jj = j; //Der kan være en fejl i final
                edit.addTextChangedListener(new TextWatcher() {
                    @Override
                    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

                    }

                    @Override
                    public void onTextChanged(CharSequence s, int start, int before, int count) {

                    }

                    @Override
                    public void afterTextChanged(Editable s) {
                        Log.d("Entered TextWatcher", jj+"");

                        //points points points
                        int plottedPoint = 0;
                        for (int i = 0; i < tableLayout.getChildCount(); i++) {
                            TableRow mRow = (TableRow) tableLayout.getChildAt(i); //Det er derfor den kun tager den første.
                            Object et = mRow.getChildAt(i);
                            //TextView mTextView = (TextView) mRow.getChildAt(1);
                            if(et instanceof  EditText) {
                                EditText e = (EditText) et;
                                if(!e.getText().toString().equals("")){
                                    try {
                                        plottedPoint = Integer.parseInt(e.getText().toString());
                                        Log.i("edittext value : ", e.getText().toString());
                                    } catch(Exception ex){
                                        Toast.makeText(getApplicationContext(), "Not a number", Toast.LENGTH_SHORT);
                                        ex.printStackTrace();
                                    }
                                }

                            }
                        }
                    }
                });

                tableRow.addView(edit);
            }
        }

        tableLayout.addView(tableRow);

    }
}

【问题讨论】:

  • 循环使用多个编辑文本不是好的做法。
  • 请参考this 处理多个编辑文本。
  • 我会尝试按照链接中的提示进行操作。谢谢你。在这种情况下,您对避免使用 EditText 循环的最佳做法有什么建议吗?我应该先创建一个 EditTexts 数组,然后再将它们推送到 TableLayout 中吗?
  • 您可以通过循环创建多个edittext,但在循环中从edittext获取值并不是最好的方式,这就是我分享链接的原因。
  • 太棒了。谢谢。

标签: android android-edittext android-tablelayout


【解决方案1】:

我找到了解决办法。

我在下面的代码中添加了一个内循环:

    //points points points
                        int plottedPoint = 0;
                        for (int i = 0; i < tableLayout.getChildCount(); i++) {
                            TableRow mRow = (TableRow) tableLayout.getChildAt(i);
    //here
                            for(int a = 0; a < mRow.getChildCount(); a++){
                                Object et = mRow.getChildAt(a);
                                //TextView mTextView = (TextView) mRow.getChildAt(1);
                                if(et instanceof  EditText) {
                                    EditText e = (EditText) et;
                                    if(!e.getText().toString().equals("")){
                                        try {
                                            plottedPoint = Integer.parseInt(e.getText().toString());
                                            Log.i("edittext value : ", e.getText().toString());
                                        } catch(Exception ex){
                                            Toast.makeText(getApplicationContext(), "Not a number", Toast.LENGTH_SHORT);
                                            ex.printStackTrace();
                                        }
                                    }

                                }
                            }

                        }

【讨论】:

    猜你喜欢
    • 2012-09-06
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多