2016-06-08 3 views
2

Моя программа предназначена для вычисления запросов людей и работы программы динамически (количество имен изменяется в зависимости от пользователя), поэтому я хочу, чтобы пользователь добавьте людей, как он хочет, создав коробку AlertDialog, проблема в следующем: Я попытался взять имя и возраст от AlertDialog, но, к сожалению, моя личная переменная не обновляется ... спасибо за помощников.не может обновить мою строку и двойные аргументы из двух полей editText в alertDialog - studio android studio

private String name; // Initialized later in the program to "" 
    private Double age; // also initilized to 0 
    . 
    . 
    . 
    . 
    dmAvarage = new AlertDialog.Builder(this); 
    dmAvarage.setTitle("add"); 
    dmAvarage.setMessage("please enter name and age" + "\n"); 

    TextView lblName = new TextView(this); 
    TextView lblPoints = new TextView(this); 
    lblName.setText("name:"); 
    lblPoints.setText("age:"); 

    final EditText txtName = new EditText(this); 
    final EditText txtPoints = new EditText(this); 

    LinearLayout layout = new LinearLayout(getApplicationContext()); 
    layout.setOrientation(LinearLayout.VERTICAL); 
    layout.addView(lblName); 
    layout.addView(txtName); 
    layout.addView(lblPoints); 
    layout.addView(txtPoints); 

    dmAvarage.setView(layout); 

    dmAvarage.setPositiveButton("add", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialogInterface, int i) { 
      name = txtName.getText().toString(); 
      String str = txtPoints.getText().toString(); 
      if (!number(str)) { //function to check if string is number 
       Toast.makeText(getApplicationContext(), "not number, Toast.LENGTH_LONG).show(); 
       return; 
      } 
      age = Double.parseDouble(str); 

     } 
    }); 
+0

Если ответ на сообщение ниже не работает для вас. Пожалуйста, предоставьте более полный код для их изучения. – ganero

ответ

0

Вы можете попробовать ниже реализации OnClick(): В коде реализации OnClick() в основном во внутреннем классе Anonymous, так что я думаю, вот почему значение, которое вы обновили там не отражается обратно в OuterClass, потому что это обновление было в рамках этого другого класса (внутренний класс). Попробуйте один раз под кодом, здесь я извлек код, написанный в onClick(), новому методу, который находится в области текущего класса Outer. Попробуйте один раз, это может сработать. Скажите, пожалуйста, если какой-либо сбой, я отлажу его больше, чтобы узнать точную причину или решение.

 dmAvarage.setPositiveButton("add", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialogInterface, int i) { 
      initializeNameAndAge(); 

     } 
    }); 



    // This method is in Main(Outer) class. 
    private void initializeNameAndAge(){ 
      name = txtName.getText().toString(); 
      String str = txtPoints.getText().toString(); 
      if (!number(str)) { //function to check if string is number 
       Toast.makeText(getApplicationContext(), "not number, Toast.LENGTH_LONG).show(); 
       return; 
      } 
      age = Double.parseDouble(str); 
     } 
+0

Спасибо за подсказку ... я проверил ваше решение, но он дал мне ошибку компиляции, потому что функция не распознает переменные EditText, поэтому я немного улучшил функцию, и я позволю ей получить две переменные EditText, но, к сожалению, ничего не изменил. –

0

See,

Вы взяли обе переменные внутри функции, и, следовательно, объем обеих переменных только эта функция, теперь вы диалоговое окно доступа с той же функции, но диалоговое окно имеет свою область применения и там для этого не будет доступа к вашей переменной, поэтому лучше

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

+0

да .. я думал, что это проблема, но в начале я не сделал глобальные переменные, и я попытался создать функцию, и через нее я получу доступ к моим переменным .. и, как вы видите, это не работает, поэтому я попробовал ваше решение, и я объявляю его глобальным, но, к сожалению, он ничего не изменил :( –

+0

у вас есть для этого журнал> – Vickyexpert

+0

i dont think so ... ... как я могу это проверить? –