如何更新父对话框片段中按钮的文本?
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!!");
}
...
现在父对话框中的按钮得到更新。
我在 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!!");
}
...
现在父对话框中的按钮得到更新。