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
的文字。
有什么想法吗?谢谢!
答案 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!!");
}
...
现在父对话框中的按钮会更新。