如何获取动态创建的edittext和文本值?

时间:2015-12-22 10:19:34

标签: android

尝试将edittext和textview小部件动态创建到程序中。它工作正常。现在我想要使用相应的edittext值访问textvalue。怎么做?

这是我尝试过的。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_callreport);

    dcname = ProductdetailsEnd.doctor;
    resultArr1 = ProductdetailsEnd.resultArr;

    callreportbtn = (Button) findViewById(R.id.callreportbtn);

    arraysize = resultArr1.length;
    TableLayout tb = (TableLayout) findViewById(R.id.tablelayout);

    for (int i = 0; i < arraysize; i++) {

        res = resultArr1[i];
        TableRow tr = new TableRow(this);
        TableRow.LayoutParams pl = new TableRow.LayoutParams(
                TableRow.LayoutParams.MATCH_PARENT);
        tr.setLayoutParams(pl);

        tr.setWeightSum(1.0f);
        product = new TextView(this);
        product.setLayoutParams(new TableRow.LayoutParams(
                LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 0.7f));
        product.setId(i);

        qty = new EditText(this);
        qty.setLayoutParams(new TableRow.LayoutParams(
                LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 0.3f));
        qty.setId(i);

        qty.setWidth(50);
        product.setText(res);
        tr.addView(product);
        tr.addView(qty);

        tb.addView(tr, i);

        Log.d("Call Report name : ", "" + dcname);
        Log.d("Call Report prod :", "" + res);
    }

    Log.d("res length : ", "" + arraysize);

    for (int i = 0; i < arraysize; i++) {

        String product1 = resultArr1[i];

        String qty1 = qty.getText().toString();

        Log.d("products &&: ", "" + product1 + ":" + qty1);
    }

    callreportbtn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Toast.makeText(getApplicationContext(), "Hello",
                    Toast.LENGTH_LONG).show();
            for (int i = 0; i < arraysize; i++) {

                String product1 = resultArr1[i];

                String qty1 = qty.getText().toString();

                Log.d("products &&: ", "" + product1 + ":" + qty1);
            }

        }
    });

}

输入值后,当我说提交时,应显示textview值以及edittext值。

为了更方便,我添加了一个输出的快照。

第一张图片输入值

first screen

第二个图像在logcat中输出。 logcat output

2 个答案:

答案 0 :(得分:1)

有很多方法可以做你想做的事。

  1. 将您的视图放在List对象中,并在提交时阅读列表。
  2. 实现TextWatcher接口,并在字符串值发生变化时记录它们。
  3. 为您的观看次数指定一个ID,然后通过Id。
  4. 检索您的观看次数

    第三个选项要求您仔细分配ID,因为我认为它们必须是唯一的。我认为,在许多情况下,第二个选项最好,因为您可能还想向用户提供一些反馈。

    编辑:

    TextWatcher是从TextView接收回调的接口。只需调用addTextChangedListener方法并提供TextWatcher实现。

    aTextView.addTextChangedListener(new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
    
                // TODO Auto-generated method stub
            }
    
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    
                // TODO Auto-generated method stub
            }
    
            @Override
            public void afterTextChanged(Editable s) {
    
                // TODO Auto-generated method stub
            }
        });
    

答案 1 :(得分:0)

最后我得到了答案。提到这篇文章 - Creation of EditText Dynamically and get their text from each of EditText

创建一个EditText数组,并在按钮onclick方法中访问它。 这是我的代码及其工作原理。

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

    dcname = ProductdetailsEnd.doctor;
    resultArr1 = ProductdetailsEnd.resultArr;

    callreportbtn = (Button) findViewById(R.id.callreportbtn);
    quantity = new ArrayList<EditText>();

    arraysize = resultArr1.length;
    TableLayout tb = (TableLayout) findViewById(R.id.tablelayout);

    for (int i = 0; i < arraysize; i++) {

        res = resultArr1[i];
        TableRow tr = new TableRow(this);
        TableRow.LayoutParams pl = new TableRow.LayoutParams(
                TableRow.LayoutParams.MATCH_PARENT);
        tr.setLayoutParams(pl);

        tr.setWeightSum(1.0f);
        product = new TextView(this);
        product.setLayoutParams(new TableRow.LayoutParams(
                LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 0.7f));
        product.setId(i);

        qty = new EditText(this);
        qty.setLayoutParams(new TableRow.LayoutParams(
                LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 0.3f));
        //qty.setId(i);

        qty.setWidth(50);
        product.setText(res);
        tr.addView(product);
        tr.addView(qty);

        tb.addView(tr, i);

        quantity.add(qty);

        Log.d("Call Report name : ", "" + dcname);
        Log.d("Call Report prod :", "" + res);
    }

    Log.d("res length : ", "" + arraysize);
    Log.d("qty length : ", "" + qty.length());
    String[] items1 = new String[quantity.size()];
    for (int i = 0; i < arraysize; i++) {

        String product1 = resultArr1[i];

        items1[i] = quantity.get(i).getText().toString();


        Log.d("qty id ", "" +qty.toString());
        Log.d("products &&: ", "" + product1 + ":" + items1);
    }

    callreportbtn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Toast.makeText(getApplicationContext(), "Hello",
                    Toast.LENGTH_LONG).show();

            String[] items = new String[quantity.size()]; 
            for (int i = 0; i < arraysize; i++) {

                String product1 = resultArr1[i];

                 items[i] = quantity.get(i).getText().toString();

                Log.d("products &&: ", "" + product1 + ":" + items[i]);
            }

        }
    });

}