我如何将按钮连接到对话框,该对话框将通过用户输入在FrameLayout中编辑TextView?

问题描述 投票:0回答:2

我一点都不了解DialogFragment。如何创建一个,如何从中获取用户输入,然后将其设置为TextView。

我想单击TITLE按钮时,弹出一个DialogFragment,要求用户输入情绪板的标题。用户输入标题。当他们单击PostiveButton的“完成”时,用户的标题将设置在情绪面板的左上方,该面板具有带提示的TextView。

请!提出问题,因为我不太了解对话框的设置。

这是MainActivity中main_layout的图片。每个元素都有一个“ @ + id /”。

enter image description here

java android xml android-dialogfragment
2个回答
0
投票

您正在寻找的解决方案是回调:

  1. 使用一种用作回调的方法创建接口
  2. 在活动上实现界面
  3. 创建对话框片段并在onAttach中获取接口
  4. 在活动中显示对话框片段
  5. 关闭对话框片段时,使用接口的实例传递文本
interface Callback {
    updateText(String text)
}
class CoolActivity... implements Callback

onCreate {
    //find your views
    showDialogBtn.setOnClickListener(...
                FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        Fragment prev = getSupportFragmentManager().findFragmentByTag("yourTag");
        if (prev != null) {
            ft.remove(prev);
        }
        ft.addToBackStack(null);

        DialogFragment dialogFragment = ExampleDialogFragment.newInstance();
        dialogFragment.show(ft, "yourTag");
     )
}


@Override
updateText(String text) {
    youtView.setText(text)
}
class CoolDialogFragment extend DialogFragment {

     private Callback callback;


     @Override
      void onAttach(Context context) {
          callback = (Callback) context
      }

      @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Dialog dialog = new Dialog(getActivity());
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        return dialog;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.dialog_fragment_example, container, false);
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
         //find the views in the dialog fragment
         closeBtn.clickListener(...
               callback.updateText(edittext.getText().toString())
               dismiss()
         )
    }
}

这里是对话框片段的要点https://gist.github.com/cutiko/7e307efcf7492ea52ef05cd90f9e3203

问题是您希望将对话框片段与另一个组件连接,并且希望将其向前进行。这不是一个好习惯,因为yiu会创建2个高附着的组件,因此最好是使用数据持久性和某种形式的React编程


0
投票

您可以将心情面板标题textview设为静态,然后使用edittext将其调用到alertdialog以将其设置为text(setText)这样。

   final EditText edittext = new EditText(MainActivity.this);

        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
        builder.setMessage("Input Title")
                .setView(edittext)
                .setCancelable(false)
                .setPositiveButton("Confirm", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {

                        YourCustomDialog.your_title_textviewMoodboard.setText(edittext.getText().toString());

                    }
                })
                .setNegativeButton("Back", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {

                    }
                });
        AlertDialog alert = builder.create();
        alert.show();

在您的自定义对话框中。全局声明您的textview静态

public static TextView your_title_textviewMoodboard;
© www.soinside.com 2019 - 2024. All rights reserved.