【问题标题】:Displaying dynamic user input programmatically以编程方式显示动态用户输入
【发布时间】:2017-03-04 00:27:07
【问题描述】:

我刚开始学习 android 应用程序开发以及 java,我有点困惑如何让它工作。我在 UI 中使用以下表格布局创建了用户输入字段:

    public void inputRow( TableLayout tl, String label, int inputSize, int inputID )
    {
        TableRow inputRow = new TableRow(this);
        TextView tv = new TextView(this);
        EditText edit = new EditText(this);

        // some margin
        inputRow.setPadding( 20,10,20,0);
        tv.setText(label);
        edit.setMaxWidth( inputSize*7)  ;
        edit.setMinimumWidth(inputSize*7);
        edit.setId( inputID );
        edit.setGravity(Gravity.RIGHT);
        inputRow.addView(tv);
        inputRow.addView(edit);

        tl.addView(inputRow);
    }

然后我用以下内容填写了 inputRows:

inputRow( myTableLayout, "Name", 30, 10000);
inputRow( myTableLayout, "Last Name", 20, 10001);
inputRow( myTableLayout, "Age", 3, 10002);
inputRow( myTableLayout, "Street Address", 20, 10003);
inputRow( myTableLayout, "State", 15, 10004);

创建按钮

 Button btAccept = new Button(this);
        btAccept.setText( "Save");
        btAccept.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v)
            {

                alertDialog.show();

            }
        });

还有警报对话:

final AlertDialog alertDialog;
alertDialog = new AlertDialog.Builder(this).create();
alertDialog.setTitle("Save");
alertDialog.setMessage("Saved..");

我如何让它显示用户单击按钮后提交的实际信息,而不仅仅是在警报对话框中显示“已保存..”?虽然我为每个输入行设置了 id,但我不确定如何实际检索它们。将所有输入放在一个数组中然后显示对我来说最有意义吗?

编辑 我一直在网上搜索可能的解决方案,并认为我可能需要查看 myTableLayout 中的每个 TableRow。

TableRow row1 = (TableRow)myTableLayout.getChildAt(0);
TextView tv1 = (TextView) row1.getChildAt(0);
String input = tv1.getText().toString(); 

我想也许我可以访问表中的第一行来检索 textview 输出。但是它仍然不起作用。我真的以为我可以使用我为每个 editText 设置的 id 访问每一行,但我没有尝试任何工作。

【问题讨论】:

    标签: java android android-edittext


    【解决方案1】:

    在您的类中创建一个 EditText 的 ArrayList,并在创建行时将 editText 对象放入其中。

    List<EditText> editTextList = new ArrayList<>();
    

    在 inputRow(.....) 方法中

    //your code
    EditText edit = new EditText(this);
    editTextList.add(edit);
    

    从arrayList中获取每个输入的文本并在警告对话框中显示:

    String message = "Saved: ";
    for(EditText edit:editTextList) {
       message+=edit..getText().toString()+" ";
    }
    alertDialog.setMessage(message);
    

    【讨论】:

    • 当我填写字段并按下“保存”时,它只显示“保存:”我仍然看不到任何用户输入。不过,这对我来说很有意义。我可以不断地在 ArrayList 中添加每个编辑文本,并将每个条目添加到方法中。 pastebin.com/gLmDzkbs
    • 我刚刚尝试将 for 循环放入 onClick(view v) 以表示“接受”,因为这应该捕捉到那个特定的时刻。还是什么都没有:/
    • 没关系,我终于让它工作了。我需要将 alertDialogue 移到按钮中。非常感谢您的帮助!
    【解决方案2】:

    你有没有试过用

    改变 Saved..
    alertDialog.setMessage("Name, 30, 10000");
    

    或您需要以任何其他方式显示它们?

    【讨论】:

    • 这不是我想要展示的。一旦我按下保存按钮,那只会在屏幕上显示“Name, 30, 1000”。我实际上需要让它显示用户输入。应用程序中有需要用户填写的字段。在这种情况下,它将是姓名、姓氏、年龄、街道和州。假设用户填写 Sally, Jane, 23, 30 Westchester St, CA。一旦用户按下保存按钮,我希望它显示所有这些。
    • 您可以使用obj.getText()获取用户填写的数据并将其传递给alertDialog.setMessage( param1 , param2 , param3 );
    • 虽然我基本上明白你在说什么,但我认为我做得不对。有没有办法让我使用它的 inputID 从“名称”的输入中检索显示的文本?我被告知要设置一个我所做的 ID(名称为 10000),但我不知道如何使用它。
    • 我认为您需要阅读this,它将帮助您了解如何获取文本用户输入
    • 据我了解,该帖子建议使用 findViewById(int,但根据我正在阅读的文档,它找到了由 XML 中的 id 属性标识的视图。我没有使用但是 XML 只是尝试用 Java 对其进行编程。EditText text = (EditText) findViewById(R.id.10000); String value = text.getText().toString(); 不起作用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    • 2011-10-27
    相关资源
    最近更新 更多