如何更新父对话框片段中按钮的文本?

How to update text of a button in parent dialogfragment?

我在 MainActivity 中有一个 dialogfragment 并像这样显示它:

...
            AddNewPlanDialog mAddNewPlanDialog = new AddNewPlanDialog();
            mAddNewPlanDialog.show(getSupportFragmentManager(), "addNewPlanDialog");
...

在这个AddNewPlanDialog中有一个按钮,当我点击这个按钮时,它会显示另一个dialogfragment为我提供一个列表给select。这是 AddNewPlanDialog.

的代码
public class AddNewPlanDialog extends DialogFragment {



    @Override
    @NonNull
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        AlertDialog.Builder mBuilder = new AlertDialog.Builder(getActivity());
        LayoutInflater mInflater = getActivity().getLayoutInflater();

        View mView = mInflater.inflate(R.layout.frag_add_new_plan_dialog, null);

        Button mPriorityButton = (Button)mView.findViewById(R.id.btn_add_new_plan_priority);


        //update priority of plan
        mPriorityButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                AddNewPlanPriorityDialog mAddNewPlanPriorityDialog = new AddNewPlanPriorityDialog();
                mAddNewPlanPriorityDialog.show(getActivity().getSupportFragmentManager(), "addNewPlanPriorityDialog");

            }
        });




        // set final view and final buttons
        mBuilder.setView(mView)
                .setPositiveButton("OK", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // TODO Auto-generated method stub

                    }
                })
                .setNegativeButton("Cancel",
                        new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog,
                                    int which) {
                                // TODO Auto-generated method stub

                            }
                        });

        return mBuilder.create();
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {

        Log.i(TAG, "ON ACTIVITY CALLED!!!");
        super.onActivityResult(requestCode, resultCode, data);
    }


}           

这是 AddNewPlanPriorityDialog 的代码。

public class AddNewPlanPriorityDialog extends DialogFragment {


    @Override
    @NonNull
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        AlertDialog.Builder mBuilder = new AlertDialog.Builder(getActivity());
        mBuilder.setTitle(R.string.pick_priority).setItems(
                R.array.add_new_plan_priority_array,
                new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                        // do something
                    }
                });

        return mBuilder.create();
    }

}

我想在 mAddNewPlanPriorityDialog 中的项目被按下并返回时更新 mPriorityButton 的文本。

有什么想法吗?谢谢!!

从第一个对话框开始显示第二个对话框时使用 mAddNewPlanPriorityDialog.setTargetFragment(AddNewPlanDialog.this, requestCode);(在调用 show() 之前)。 并且 ((AddNewPlanDialog) getTargetFragment()).someFunction();

而不是第二个对话框中的 // do something

感谢smb的解答,问题解决。这里有一些补充。

在第二个对话框中,从父 dialogfragment 调用函数,如下所示:

...
((AddNewPlanDialog)getTargetFragment()).updatePriority();
...

然后在第一个对话框中定义这个函数。

...
public void updatePriority(){


    Button mButton = (Button) getDialog().findViewById(R.id.btn_add_new_plan_priority);
    mButton.setText("pick me!!");

}
...

现在父对话框中的按钮得到更新。