我在Android Studio中制作我的应用程序,我需要创建第一个自定义对话框,按对话框1中的按钮然后,对话框2应该显示。示例:用户在活动中按下一个按钮,出现对话框1,用户按下对话框1中的“下一步”按钮,然后出现对话框2。
我能想到的最简单的事情就是显示对话框1,然后按下下一个按钮(在onClick方法内)关闭对话框1,然后显示对话框2.我有点难,因为我在另一个Activity Fragment中的DialogFragment中执行此操作。
ImageButton NextB = view.findViewById(R.id.NextBN);
NextB.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v) {
NewDTask();
}
});
public void NewDTask()
{
final Dialog dialog = new Dialog(getContext());
dialog.dismiss();
NewTaskDialog NTD = new NewTaskDialog();
NTD.show(getFragmentManager(), "New task dialog");
}
此时,唯一发生的事情是Dialog 2在按下下一个按钮后显示,但不正确,它会阻止屏幕,对话框1仍然存在,但也被阻止。
您正在创建新的Dialog 1并在NewDTask
中将其解雇。相反,你必须在从dismiss()
调用NewDTask()
之后只写onClickListener
ImageButton NextB = view.findViewById(R.id.NextBN);
NextB.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v) {
NewDTask();
dismiss();
}
});
public void NewDTask()
{
// final Dialog dialog = new Dialog(getContext());
// dialog.dismiss();
NewTaskDialog NTD = new NewTaskDialog();
NTD.show(getChildFragmentManager(), "New task dialog");
}
public class FirstDialog extends DialogFragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.dialog_first,container,false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ImageButton nextDialog = (ImageButton) view.findViewById(R.id.nextDialog);
nextDialog.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openNextDialog();
}
});
}
private void openNextDialog() {
SecondDialog dialog = new SecondDialog();
this.dismiss();
dialog.show(getFragmentManager(),"second fragment");
}
}
你可以这样试试。我从另一个片段中的按钮单击打开了第一个对话框。在您的方法中您正在创建新的对话框,然后解除创建的对话框而不是您要关闭的对话框。