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

时间:2015-01-23 09:35:10

标签: android android-fragments android-button android-dialogfragment

dialogfragment中有一个MainActivity并显示如下:

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

在此AddNewPlanDialog中,有一个按钮,当我点击此按钮时,它会显示另一个dialogfragment以提供供我选择的列表。以下是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();
    }

}

当按下并返回mPriorityButton中的项目时,我想更新mAddNewPlanPriorityDialog的文字。

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

感谢smb的回答,这个问题解决了。以下是一些补充。

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

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

然后在第一个对话框中定义此功能。

...
public void updatePriority(){


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

}
...

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