android - 从 Android 中的多个布局获取 EditTexts 的值不起作用?

标签 android android-edittext

有一段时间没有问问题了,所以已经迟到了!

我正在创建一个应用程序,可以在单击时创建作业项目,每个新行包含一个描述(EditText)、一个价格(EditText)和一个用于删除当前行的按钮,但我在获取值时遇到问题当有多于一行时,来自 EditText 字段 - 它只返回最新行的值。

除了“作业列表容器”之外, View 是动态创建的,因此请原谅缺少 XML,但我想要实现的结构如下,单击“添加”按钮会添加一行(这可以是多行)并单击提交按钮获取所有描述和价格值并处理它们(添加价格并将作业添加到数据库):

enter image description here

...这是我为它编写的从 addNewJobRow onClick 监听器调用的代码(为了简单起见,全部放在一起):

private void addJobItem() {

    //Create a new row container
    final LinearLayout jobRowContainer = new LinearLayout(this);

    //Create a new EditText for the Description
    final EditText description = new EditText(this);
    description.setHint("Description...");
    description.setLayoutParams(new LinearLayout.LayoutParams(
            ViewGroup.LayoutParams.WRAP_CONTENT,
            ViewGroup.LayoutParams.WRAP_CONTENT,
            1.0f
    ));

    //Create an EditText for the Price
    final EditText price = new EditText(this);
    price.setHint("00.00");

    //Create a new button to delete the row
    Button delete = new Button(this);
    delete.setBackgroundColor(Color.RED);
    delete.setText("X");

    //Add Description, Price and Delete to the row container
    jobRowContainer.addView(description);
    jobRowContainer.addView(price);
    jobRowContainer.addView(delete);

    //Add the Row Container to the Jobs List Container
    ll_jobListContainer.addView(jobRowContainer);

    //Get the values of the Description and Price, for each row
    btn_JobSubmit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            for (int i = 0; i < ll_jobListContainer.getChildCount(); i++) {
                for(int j = 0; j < jobRowContainer.getChildCount(); j++) {

                    if (jobRowContainer.getChildAt(i) instanceof EditText){
                        String descriptionString = description.getText().toString();
                        String priceString = price.getText().toString();

                        System.out.println("z! " + descriptionString + " @ " + priceString);
                    }
                }
            }
        }
    });
}

我已经尝试了几次迭代,使用和不使用嵌套的 FOR 循环以及使用和不使用 instanceof,但它所做的只是打印出最新行。

那么,如果我有多个作业行,如何获取所需的所有值?

感谢您的宝贵时间和所有这些好东西 xxx

最佳答案

基本问题是您仅使用 descriptionprice 的最后一个实例,而不是每个行实例。 (这可能也是德米特里所说的)。要修复它,您需要获取每一行的输入。这是一种方法。

描述价格设置ID。 (不能只使用“1”或“2”,它必须是资源类型 ID,这样才能保证唯一)。我制作了一个行的虚拟布局文件,并将其中的 ID 分配给 2 个 EditText。可能有更好的方法来做到这一点。所以无论如何,在你的声明中添加这两行

descripton.setId(R.id.description);price.setId(R.id.price);

现在这是你的 onClick()

public void onClick(View v) {
    for (int i = 0; i < ll_jobListContainer.getChildCount(); i++) {
        LinearLayout currentRow = (LinearLayout)ll_jobListContainer.getChildAt(i);
        EditText editText = (EditText)currentRow.findViewById(R.id.description);
        String descriptionString = editText.getText().toString();

        editText = (EditText)currentRow.findViewById(R.id.price);
        String priceString = editText.getText().toString();
        Log.d(TAG, "z! " + descriptionString + " @ " + priceString);
    }
}

编辑:我不想更改这个答案,因为它已经被接受,所以我在另一个答案中提出了更简洁的解决方案。

关于android - 从 Android 中的多个布局获取 EditTexts 的值不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42142455/

相关文章:

android - 谷歌播放 : REQUEST_INSTALL_PACKAGES: Permission use is not directly related to your app's core purpose

android - 平板电脑或手机 - Android

android - 在 ListView 中禁用和启用 edittext

android - 用点提示密码 EditText? [安卓]

Android共享元素重新进入过渡没有动画

android - 防止菜单在触发 onItemClicked 后立即关闭

android - AppCompat v7 工具栏 onOptionsItemSelected 未调用

java - 在 android 的 editText 中使用 R.String

android - 在 Android 中禁用 EditText

android - 编辑文本的最后状态仍然显示为某种阴影?