Как передать данные из фрагмента в диалогFragment

Я знаю, что это было задано раньше, но я не совсем понимаю, как его реализовать. У меня есть фрагмент "myFragment", в котором я создаю объект "myDialogueFragment". Я хочу передать значение myDialogueFragment, когда я вызываю его из myFragment. У меня есть целое число, которое я хочу передать в myDialogueFragment и сохранить это число в локальной базе данных вместе с некоторой другой информацией из myDialogueFragment.

Возможно, я ошибаюсь, но весь код, который я видел, касается отправки данных из myDialogueFragment обратно в myFragment, чего я не хочу.

static MyDialogFragment newInstance(int num) {

MyDialogFragment f = new MyDialogFragment();

// Supply num input as an argument.
Bundle args = new Bundle();
args.putInt("num", num);
f.setArguments(args);

return f;
}  

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mNum = getArguments().getInt("num");
    ...
}

Итак, этот код получает аргументы в методе myFragment onCreate(). Я хочу отправить аргументы в myFragment() и получить их в myDialogueFragment.

Как я могу это достичь?

Ответ 1

Вам нужно установить атрибуты на фрагмент следующим образом:

Bundle args = new Bundle();
args.putString("key", "value");
DialogFragment newFragment = new YourDialogFragment();  
newFragment.setArguments(args);
newFragment.show(getSupportFragmentManager(), "TAG");

Все, что вам нужно сделать сейчас, - это уловить эти аргументы в вашем фрагменте и использовать их...

И В ФРАГМЕНТЕ ДИАЛОГА ВЫ ПРОЧИТАЛИ ЭТО ЭТО...

Bundle mArgs = getArguments();
String myValue = mArgs.getString("keyUsed to send it...");

Ответ 2

Я вызываю FragmentDialog внутри calsswhich, который был выделен для ActivityFragment

//TODO 1
                Followers clickedObj = (Followers) 

                parent.getItemAtPosition(position);
                Bundle bundle = new Bundle();
                bundle.putString("name", clickedObj.getFollow_name());
                bundle.putString("nick", clickedObj.getFollow_nickname());
                bundle.putString("score", clickedObj.getFollow_score());
                bundle.putString("title", clickedObj.getFollow_title());
                FragmentManager fragmentManager = getSupportFragmentManager();
                UserPopUp userPopUp = new UserPopUp();
                //TODO 1
                userPopUp.setArguments(bundle);
                userPopUp.show(fragmentManager, "followers");

и я назвал его onActivityCreated в моем классе, который расширился до DialogFragment

@Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        //Bundle Data Cekme başlangıç
        Bundle mArgs = getArguments();
        String userName = mArgs.getString("name");
        String userNickName = mArgs.getString("nick");
        String userTitle = mArgs.getString("title");
        String userScore = mArgs.getString("score");
        user_name.setText(userName);
        nick_name.setText(userNickName);
        challenge_title.setText(userTitle);
        user_score.setText(userScore);
        // bitiş

    }

работает довольно хорошо

Ответ 3

Два фрагмента никогда не должны общаться напрямую.

Рекомендуемый способ связи между фрагментами - создать общий объект ViewModel. Оба фрагмента могут получить доступ к ViewModel через содержащую их активность. Фрагменты могут обновлять данные в ViewModel, и если данные предоставляются с использованием LiveData, новое состояние будет передано другому фрагменту, пока он наблюдает LiveData из ViewModel.

Если вы не можете использовать общую модель ViewModel для связи между вашими фрагментами, вы можете вручную реализовать поток связи с помощью интерфейсов. Однако это требует больше усилий для реализации, и его нелегко использовать в других фрагментах.

для дополнительной информации