Android-动态地从用户获取文本并将其添加到表格布局

时间:2015-04-16 09:57:13

标签: android alertdialog

我是Android开发人员的新手,我遇到了一些问题。 我正在构建一个应用程序,我想为用户弹出一个对话框,从对话框中获取文本并将其作为单元格动态添加到预定义的表格布局中。我希望多次执行此操作,每次单击一个按钮。

如果这是一个重复我道歉,但我在网上搜索了很多解决方案,并且无法让他们中的任何一个为我工作。 我认为我的主要问题是AlertDialog.Builder的异步,我的代码不会等待它,因为我无法阻止UI线程。所以我试着设置一个听众,但这似乎也不起作用。

任何帮助或关于Android中听众的一些基本知识都将受到高度赞赏。

谢谢!

类中定义的实例变量:

String userInput;

显示对话框的方法:

 public void showDialog(String message, final Context context) {
    AlertDialog.Builder alertBox = new AlertDialog.Builder(context);
    alertBox.setMessage(message);
    final EditText input = new EditText(this);
    alertBox.setView(input);
    alertBox.setPositiveButton("OK",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                    userInput = input.getText().toString();
                }
            });
    alertBox.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
        }
    });
    alertBox.show();
}

调用对话框并设置一个新行,通过单击按钮调用:

    public void addTeam(View view) {
    showDialog("Please enter text", this);
    //Here I want to already have userInput var, thus it should be after the click.

    TableRow row= new TableRow(this);
    TableRow.LayoutParams lp = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT);
    row.setLayoutParams(lp);
    TextView name = new TextView(this);
    name.setText(userInput);
    name.setTextSize(20);
    name.setPaintFlags(name.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
    row.addView(name);
    //teamsTable is a TableLayout defined int the XML
    teamsTable.addView(row, ++nTeamTableRowCount);
}

2 个答案:

答案 0 :(得分:0)

创建一个界面,调用它,例如操作

public interface Action {

    public void onCompleted(String input);

}

更改您的方法签名

public void showDialog(String message, final Context context, final Action action) 

更改onClick方法的正面按钮。

public void onClick(DialogInterface dialog, int whichButton) {
    userInput = input.getText().toString();        
    if(action!=null) action.onCompleted(userInput);
}

然后,例如创建一个匿名类

 showDialog("Please enter text", this, new Action() {

      public void onCompleted(String input) {

          //Do what you want with input here. e.g.

          TableRow row= new TableRow(this);
          TableRow.LayoutParams lp = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT);
          row.setLayoutParams(lp);
          TextView name = new TextView(this);
          name.setText(userInput);
          name.setTextSize(20);
          name.setPaintFlags(name.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
          row.addView(name);
          //teamsTable is a TableLayout defined int the XML
          teamsTable.addView(row, ++nTeamTableRowCount);

      }

 });

您可以通过为对话框创建专用类来清理它。

答案 1 :(得分:0)

尝试在Activity中添加更新TableLayout

的方法
private void addRow(String userInput) {
    TableRow row = new TableRow(this);
    TableRow.LayoutParams lp = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT);
    row.setLayoutParams(lp);
    TextView name = new TextView(this);
    name.setText(userInput);
    name.setTextSize(20);
    name.setPaintFlags(name.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
    row.addView(name);
    teamsTable.addView(row, ++nTeamTableRowCount);
}

并在onClick()中调用它:

alertBox.setPositiveButton("OK",
    new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            addRow(userInput);
        }
    });