Android диалог и значения редактирования текста? - PullRequest
4 голосов
/ 22 августа 2011

У меня проблемы с сохранением строковых значений, которые находятся в пределах edittext.

Что происходит, dialog показывает, с edittext, ок и кнопку отмены.

Когда нажата OK button, я хочу, чтобы переменная bar получила string-value от edittext.

public void dialog(){

    final Dialog dialog = new Dialog(myClass.this);
    dialog.setContentView(R.layout.mydialog);
    dialog.setTitle("I'm soo smart. S-M-R-T. Smart.");
    dialog.setCancelable(true);
    dialog.show();
    Button okButton = (Button) dialog.findViewById(R.id.dialog_OK_BUTTON);
    okButton.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            try{

                LayoutInflater factory = LayoutInflater.from(Inloggning.this);
                final View textEntryView = factory.inflate(R.layout.myDialog, null);
                final EditText barText= (EditText) textEntryView.findViewById(R.id.dialog_FOO);


                // this gets returned empty.
                bar= barText.getText().toString();


                System.out.println("foo: "+bar);


                //call();
                dialog.hide();

            }
            catch(Exception e){

                // do whatever nessesary.
            }

        } 
    });

    Button cancelButton = (Button) dialog.findViewById(R.id.dialogbtn_cancel);
    cancelButton.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            dialog.dismiss();
        }
    });



}

Может кто-нибудь пролить свет на это, пожалуйста?

РЕДАКТИРОВАТЬ: Это пример кода.Фактический код не содержит дубликатов имен переменных.

2-Й РЕДАКТИРОВАТЬ: удалены дубликаты ..

Ответы [ 4 ]

3 голосов
/ 22 августа 2011

Проверьте, является ли barText нулевым.

Что произойдет, если вы объявите его из прослушивателя onClick?

Может измениться:

final EditText barText= (EditText) textEntryView.findViewById(R.id.dialog_FOO);

на:

final EditText barText= (EditText) dialog.findViewById(R.id.dialog_FOO);
0 голосов
/ 22 августа 2011

У меня были похожие проблемы.Я сделал подкласс.

   public class InputDialog extends Dialog{

  private String result = null;

  private Context context = null;

  private EditText keyEdit = null;

  public InputDialog(Context _context, String _title, String _message) {
    super(_context);
    context = _context;

    setContentView(R.layout.input_dialog);
    setTitle(_title);

    keyEdit = ((EditText) findViewById(R.id.inputEditText));





  }

  public void onBackPressed() {
    cancel();
  }


  public InputDialog setOkListener(View.OnClickListener _onOk) {
    findViewById(R.id.okButton).setOnClickListener(_onOk);
    return this;
  }

  public InputDialog setCancelListener(View.OnClickListener _onCancel) {
    findViewById(R.id.cancelButton).setOnClickListener(_onCancel);
    return this;
  }

  public String getResult() {    
    return keyEdit.getText().toString();
  }

  public EditText getKeyEdit() {
    return keyEdit;
  }


}

Используя

inputDialog = new InputDialog(context, getString(R.string.encription_dialog_title), getString(R.string.encription_dialog_message));
inputDialog.setOkListener(new OnClickListener(){
  public void onClick(View v) {        
    model.setEncriptionKey(inputDialog.getResult());
    listRefresh();
    if (inputDialog.getResult() == null || inputDialog.getResult().equals("")) {
      AppHelper.showMessage(FileManagerActivity.this, getString(R.string.encription_dialog_message));
    } else {
      inputDialog.dismiss();
      inputDialog.getKeyEdit().setText("");
    }

  }
});
inputDialog.setCancelListener(new OnClickListener(){
  public void onClick(View v) {      
    inputDialog.dismiss();
    inputDialog.getKeyEdit().setText("");
    onBackPressed();
  }
});
inputDialog.setOnCancelListener(new DialogInterface.OnCancelListener(){

  public void onCancel(DialogInterface dialog) {
     inputDialog.dismiss();
     inputDialog.getKeyEdit().setText("");
     onBackPressed();

  }
});

EditText keyEdit = inputDialog.getKeyEdit();



});
0 голосов
/ 22 августа 2011

Я предполагаю, что эта строка является переменной типа String, проблема здесь в том, что вы объявляете два edittexts с одинаковым именем, и переменные String с одинаковым именем, я предлагаю вам изменить имена и попробовать еще раз.

 final EditText barText=(EditText) textEntryView.findViewById(R.id.dialog_FOO);
 final EditText barText1=(EditText) textEntryView.findViewById(R.id.dialog_FOO1);

 // these gets returned empty.
 bar= barText.getText().toString();
 bar1= barText.getText().toString();

 System.out.println("foo: "+bar);
 System.out.println("foo: "+bar1);
0 голосов
/ 22 августа 2011

во-первых, два разных поля редактирования текста должны иметь разные идентификаторы.во-вторых, будут две строковые переменные для их хранения.

final EditText barFirstText = (EditText) textEntryView.findViewById (R.id.dialog1_FOO);final EditText barSecondText = (EditText) textEntryView.findViewById (R.id.dialog2_FOO);

            // these gets returned empty.
            barFirst= barText.getText().toString();
            barSecond= barText.getText().toString();

            System.out.println("foo: "+barFirst);
            System.out.println("foo: "+barSecond);
...