【问题标题】:Android dialog and edittext values?Android对话框和edittext值?
【发布时间】:2011-08-22 12:27:46
【问题描述】:

我无法保存位于 edittext 中的字符串值。

会发生什么,dialog 显示,edittext,一个确定和一个取消按钮。

当 OK button 被推送时,我想要发生的是bar-变量从edittext 获取string-value

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



}

有人可以解释一下吗?

编辑:这是示例代码。实际代码在变量上没有重复名称。

第二次编辑:删除重复项..

【问题讨论】:

    标签: java android dialog android-edittext


    【解决方案1】:

    检查barText 是否为空。

    如果你从onClick 监听器中声明它会发生什么?

    也许会改变:

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

    到:

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

    【讨论】:

    • 太好了,具体是什么?
    【解决方案2】:

    首先,两个不同的编辑文本框必须有不同的 id。 其次将有两个字符串变量来存储它们。

    最终的 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);
    

    【讨论】:

      【解决方案3】:

      我也有类似的问题。我做了子类。

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

      【讨论】:

        【解决方案4】:

        我假设这个栏是一个字符串类型的变量,这里的问题似乎是你声明了两个同名的编辑文本,而且字符串变量也是同名的,我建议你改变名字再试一次。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-02-10
          • 1970-01-01
          • 2012-12-05
          • 2019-09-05
          • 2015-05-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多