У меня возникли проблемы с передачей входных данных пользователя в диалоговое окно предупреждения в Android.

Мне был предоставлен класс, который будет запрашивать ввод пользователя, и он назначит каждому вводу идентификатор. Вот так,

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);
    }

Тогда входные строки будут примерно такими:

inputRow(myTableLayout, "Name", 30, 10000);
inputRow(myTableLayout, "Email", 20, 10001);

Затем будет создано диалоговое окно с предупреждением для отображения сообщения при нажатии кнопки:

final AlertDialog alertDialog;
alertDialog = new AlertDialog.Builder(this).create();
alertDialog.setTitle("Your Inputs");
alertDialog.setMessage("Inputs");

Но когда я попытался загрузить .setMessage() с назначенными идентификаторами, он вернет null. Мне подсказали использовать функцию View .getID(), но я все еще новичок в java и у меня проблемы с использованием этой функции. Заранее спасибо.

0
Wooster 23 Фев 2016 в 22:35

2 ответа

Лучший ответ

Если у вас есть идентификаторы EditText, вы сможете сделать это следующим образом:

//if you do not have a reference to the EditText already -- this uses the IDs in your question
EditText nameEditText = (EditText) myTableLayout.findViewById(10000);
EditText emailEditText = (EditText) myTableLayout.findViewById(10001);
String nameValue = nameEditText.getText().toString();
String emailValue = emailEditText.getText.toString();

// now you can do whatever you need to with the values
AlertDialog dialog = new AlertDialog.Builder(this)
            .setTitle("Your Inputs")
            .setMessage("Name is: " + nameValue + ", Email is: " + emailValue)
            .create();
dialog.show();

Обновите, добавив дополнительный код

Приведенный ниже код отлично работает для меня, используя вашу функцию inputRow():

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

    final TableLayout tableLayout = (TableLayout) findViewById(R.id.table);

    inputRow(tableLayout, "Name", 30, 10000);
    inputRow(tableLayout, "Email", 20, 10001);

    Button doneButton = (Button) findViewById(R.id.done_btn);

    doneButton.setOnClickListener(new View.OnClickListener() {
      @Override public void onClick(View v) {
        //if you do not have a reference to the EditText already -- this uses the IDs in your question
        EditText nameEditText = (EditText) tableLayout.findViewById(10000);
        EditText emailEditText = (EditText) tableLayout.findViewById(10001);
        String nameValue = nameEditText.getText().toString();
        String emailValue = emailEditText.getText().toString();

        // now you can do whatever you need to with the values
        AlertDialog dialog = new AlertDialog.Builder(MainActivity.this)
            .setTitle("Your Inputs")
            .setMessage("Name is: " + nameValue + ", Email is: " + emailValue)
            .create();
        dialog.show();
      }
    });
  }

Content_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >

  <TableLayout
      android:id="@+id/table"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      />

  <Button
      android:id="@+id/done_btn"
      android:text="done"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      />
</LinearLayout>

Picture of output

0
Alex Townsend 24 Фев 2016 в 17:09

Вам нужна ссылка на каждый текст редактирования, который вы хотите добавить в свой диалог,

Вы можете сделать это:

  • сканирование вашего TableLayout с помощью getChildAt (см. пример).

ИЛИ

  • просто сохранение каждого значения в отдельном списке во время обратного вызова слушателя с измененным текстом в EditText

Затем, используя эту ссылку, вы можете получить значение с помощью getText (). ToString () - см. http://developer.android.com/reference/android/widget/EditText.html#getText ()

0
Community 23 Май 2017 в 11:50