Как мне подключить кнопку к диалогу, который будет редактировать TextView внутри FrameLayout с пользовательским вводом? - PullRequest
0 голосов
/ 05 октября 2019

Я вообще не понимаю DialogFragment. Как создать его, как извлечь из него пользовательский ввод и установить его в TextView.

Я бы хотел, чтобы при нажатии кнопки TITLE вызывался фрагмент DialogFragment с просьбой ввестиназвание их Настроения Настроения. Пользователь вводит заголовок. Когда они нажимают кнопку PostiveButton «Готово», заголовок пользователя устанавливается в верхнем левом фрейме доски настроения, в которой есть TextView с подсказкой.

Пожалуйста! Задавайте вопросы, потому что я не очень понимаю настройки диалога.

Вот изображение моего main_layout в моей MainActivity. Каждый элемент имеет "@ + id /".

enter image description here

Ответы [ 2 ]

0 голосов
/ 05 октября 2019

Решение, которое вы ищете, это обратный вызов:

  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

Проблема в том, что вы хотите связать фрагмент диалога с другим компонентом, и вы хотите это сделатьпрямо вперед. Это не считается хорошей практикой, поскольку вы создаете 2 компонента с высокой степенью присоединения, поэтому лучше всего использовать постоянство данных и некоторую форму программирования реакции

0 голосов
/ 05 октября 2019

Вы можете сделать статичным текстовое представление заголовка вашей доски настроений, а затем вызвать его в alerttdialog с помощью edittext, чтобы установить текст (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();

в вашем пользовательском диалоге. объявить текстовое представление статическим глобально

public static TextView your_title_textviewMoodboard;
...