【问题标题】:How to access EditText data in DialogFragment如何在 DialogFragment 中访问 EditText 数据
【发布时间】:2019-01-31 17:05:06
【问题描述】:

我的问题是如何获取用户输入到我的EditText 的数据,然后使用Toast.makeTest 方法显示数据。

我不知道如何访问片段中的EditText 这个链接对我不起作用: getText from a EditText in a DialogFragment

这是我的代码:

public class FragmentDialog extends DialogFragment {
EditText entry;
    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState)

 {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setView(R.layout.alert_dialog).setTitle("Add your text").setMessage("HElllloooooooo").setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            Toast.makeText(getActivity(), entry.getText().toString(), Toast.LENGTH_SHORT).show();
        }
    }).setPositiveButton("ADD", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            Toast.makeText(getActivity(),  entry.getText().toString(), Toast.LENGTH_SHORT).show();
        }
    });
    return builder.create();
}
}

【问题讨论】:

  • 我没有看到任何与edittext相关的内容。
  • 就是这样,无法实现
  • 你的意思是没有实现?您需要在对话框中包含edittext,或者您需要从对话框或片段中访问edittext..
  • 你能用解释一下吗?怎么办?
  • 由于您的问题不清楚,您想要来自dialogfragmentactivity 的editext 输入?

标签: android android-fragments android-edittext android-alertdialog android-dialogfragment


【解决方案1】:

编辑文本的工作原理:

首先你应该绑定它:

entry =  view.findViewById(R.id.MyEdtText);

其次要访问编辑中的书面数据(文本),您应该调用:

entry.getText().toString()

要在 Toast 中显示书面文本,您必须:

if(TextUtils.isEmpty(entry.getText().toString()){
     Toast.makeText(getActivity(), "No Text Entered", Toast.LENGTH_SHORT).show();
}
else{
    Toast.makeText(getActivity(), "The Text Entered Is"+  entry.getText().toString(), Toast.LENGTH_SHORT).show();
}

针对您的案例的具体解决方案是:

    public class FragmentDialog extends DialogFragment {
   private EditText entry;



    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)


    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState)

    {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

        LayoutInflater inflater = getActivity().getLayoutInflater();

        View DialogView = inflater.inflate(R.layout.alert_dialog,null);

        entry = DialogView.findViewById(R.id.entryEditText); // replace it with the correct XML ID

        builder.setView(DialogView).setTitle("Add your text").setMessage("HElllloooooooo").setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Toast.makeText(getActivity(), "canceled operation", Toast.LENGTH_SHORT).show();
            }
        }).setPositiveButton("ADD", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Toast.makeText(getActivity(), "the edit text value: "+entry.getText().toString(), Toast.LENGTH_SHORT).show();
            }
        });
        return builder.create();
    }
}

要显示对话框,请在您的活动中调用以下代码:

FragmentDialog dialog = new FragmentDialog();
dialog.show(getSupportFragmentManager(), "YourDialog");

概念证明(看看它是如何工作的):

【讨论】:

  • 我做到了,但是吐司是空的
  • @Yuri 现在检查答案我已经添加了更多代码,我已经尝试过了,它成功地工作了! :) 如果它适合你,请投票并接受作为答案
  • @Yuri 我添加了一个 GIF,向您展示了它是如何工作的:D
  • 感谢 mainActivity 中的 getFragmentManager() 为我工作:)
【解决方案2】:

您必须在 onCreateView 上找到 ViewbyId,如下所示

  public class FragmentDialog extends DialogFragment {
    EditText entry;
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
          View view = inflater.inflate(R.layout.fragment_username, container);
          entry = (EditText) view.findViewById(R.id.username);
          mEditText.requestFocus();

          return view;
        }}

【讨论】:

  • 谢谢,你的意思是把 public Dialog onCreateDialog(Bundle savedInstanceState) 改成 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多