【问题标题】:How I can get values EditText a Dialog?如何获取值 EditText 一个对话框?
【发布时间】:2015-12-06 14:57:35
【问题描述】:

我在 Android 上部署了我的应用程序。

我在我的主 Activity 按钮中放置了一个,当您单击该按钮时,您必须显示一个对话框,在该对话框中我在 2 EditText 上写入文本并按下 OK 按钮。

我的问题是......如何在我的主要活动事件中获取 EditText 的值??

onDialogPositiveClick(...)
onDialogNegativeClick(...)

这是我的对话课程DialogAlex.java

public class DialogAlex extends DialogFragment {

    public interface NoticeDialogListener {
        public void onDialogPositiveClick(DialogFragment dialog,int id);
        public void onDialogNegativeClick(DialogFragment dialog,int id);
    }
    NoticeDialogListener mListener;

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);        
        try {     
            mListener = (NoticeDialogListener) activity;
        } catch (ClassCastException e) {
            // The activity doesn't implement the interface, throw exception
            throw new ClassCastException(activity.toString()
                    + " must implement NoticeDialogListener");
        }
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {     
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

        LayoutInflater inflater = getActivity().getLayoutInflater();
        builder.setView(inflater.inflate(R.layout.dialog_signin, null)) //This layout contains only two EditText, ET1 and ET2.

                .setPositiveButton("adicionar", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {

                        mListener.onDialogPositiveClick(DialogAlex.this,id);
                    }
                })
                .setNegativeButton("cancelar", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {

                        mListener.onDialogNegativeClick(DialogAlex.this, id);
                    }
                });
        return builder.create();
    }
}

这是我的Activity Main

...
@Override
    public boolean onOptionsItemSelected(MenuItem item) {       
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }
        if (id == R.id.telefono)
        {
            showNoticeDialog();  //call dialog        
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    public void showNoticeDialog() {        
        DialogFragment dialog = new DialogAlex();
        dialog.show(getSupportFragmentManager(), "NoticeDialogFragment");
    }

    @Override
    public void onDialogPositiveClick(DialogFragment dialog,int id) {        
        //**************HOW obtaining values ​​EditText?*****************************
        Toast.makeText(this,"hola", Toast.LENGTH_LONG).show();      
    }

    @Override
    public void onDialogNegativeClick(DialogFragment dialog,int id) {

    }
...

问候

【问题讨论】:

  • 只是 dialog.findViewbyId(R.id.youid).

标签: android android-layout android-fragments android-intent android-activity


【解决方案1】:

你真的很接近,你必须通过你的监听器传递这些值。

把你的界面改成这样:

public interface NoticeDialogListener {
    public void onDialogPositiveClick(String input1, String input2);
    public void onDialogNegativeClick();
}

然后更改 onCreateDialog 以利用此功能:

     final View view = inflater.inflate(R.layout.dialog_signin, null);
     builder.setView(view) //This layout contains only two EditText, ET1 and ET2.
                .setPositiveButton("adicionar", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        EditText et1 = (EditText) view.findViewById(R.id.et1);
                        EditText et2 = (EditText) view.findViewById(R.id.et2);
                        String input1 = et1.getText().toString();
                        String input2 = et2.getText().toString();
                        mListener.onDialogPositiveClick(input1, input2);
                    }
                })
                .setNegativeButton("cancelar", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {        
                        mListener.onDialogNegativeClick();
                    }
                });
        return builder.create();

那么你的接口实现就变成了:

@Override
public void onDialogPositiveClick(String input1, String input2) {        
    Toast.makeText(this,"hola " + input1 + " " + input2, Toast.LENGTH_LONG).show();      
}

【讨论】:

  • 谢谢大家,我正在指导我完成 SDK,但没有到达那部分或很晚......谢谢
【解决方案2】:

你可以将它添加到你的接口的方法中。例如

public interface NoticeDialogListener {
    public void onDialogPositiveClick(DialogFragment dialog, String value, int id);
    public void onDialogNegativeClick(DialogFragment dialog,int id);
}

然后

onCreateDialog

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {     
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

    LayoutInflater inflater = getActivity().getLayoutInflater();
    final View view = inflater.inflate(R.layout.dialog_signin, null);
    builder.setView(view)  .setPositiveButton("adicionar", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                   EditText edittext = (EditText) view.findViewById(R.id.editText)
                    mListener.onDialogPositiveClick(DialogAlex.this, edittext.getText().toString(), id);
                }
            })

【讨论】:

    【解决方案3】:

    试试这个代码。

    public Dialog onCreateDialog() {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        // Get the layout inflater
        LayoutInflater inflater = this.getLayoutInflater();
        Log.i("INFO","Creating Dialog...");
        View view = inflater.inflate(R.layout.goaldialog, null);
        // Inflate and set the layout for the dialog
        // Pass null as the parent view because its going in the dialog layout
        builder.setView(view)
                // Add action buttons
                .setPositiveButton(R.string.SetAGoalButton, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int id) {
                        EditText et = (EditText)view.findViewById(R.id.GoalChooser);
                        Integer goalNumber = Integer.parseInt(et.getText().toString());
                        globalVariable = goalNumber;
                        Log.i("INFO",Integer.toString(goalNumber));
                        dialog.dismiss();
                    }
                })
                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        dialog.dismiss();
                    }
                });
        builder.show();
        return builder.create();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-18
      • 1970-01-01
      • 2018-07-13
      • 1970-01-01
      • 2015-05-08
      相关资源
      最近更新 更多