我在github上找到了一个用于android的自定义BlurDialog。它会打开一个带有选项的新对话窗口,并模糊屏幕其余部分的背景。我有完美的工作,但我遇到了一个问题,如果我在选项列表中选择一个项目,它将启动正确的活动,但是当我点击后退按钮时,我回到上一个活动和对话窗口仍然是开放的。关闭它的唯一方法是在对话框窗口外单击。
我试图找到在启动新活动之前如何关闭对话框窗口,以便当用户返回到该屏幕时,对话框窗口不再打开。我还是Android的新手,所以我确信我错过了一些非常简单的东西,我只是想不出来。这是我的片段中的“onCreateDialog”方法,它创建了模糊的对话框窗口......
@Override
@NonNull
public Dialog onCreateDialog(Bundle savedInstanceState) {
final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
View view = getActivity().getLayoutInflater().inflate(R.layout.fragment_profile_dialog, null);
TextView text = (TextView) view.findViewById(R.id.follow_or_unfollow);
if(isSelf) {
text.setText("Edit Profile");
} else {
text.setText((isFollowing) ? "UnFollow" : "Follow");
}
RelativeLayout followButton = (RelativeLayout) view.findViewById(R.id.follow_layout);
RelativeLayout chatButton = (RelativeLayout) view.findViewById(R.id.chat_layout);
followButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//NEED TO CLOSE DIALOG WINDOW HERE
if(isSelf) {
//activate ProfileEditActivity
getActivity().startActivity(new Intent(getActivity(), EditProfileActivity.class));
} else {
Map<String, Object> updates = new HashMap<>();
if(isFollowing) {
//unfollow
updates.put("/following/" + user.getUid() + "/users/" + userID, null);
updates.put("/followers/" + userID + "/users/" + user.getUid(), null);
} else {
updates.put("/following/" + user.getUid() + "/users/" + userID, true);
updates.put("/followers/" + userID + "/users/" + user.getUid(), true);
//follow
}
database.getReference().updateChildren(updates);
getFragmentManager().beginTransaction().remove(ProfileDialogFragment.this).commit();
}
}
});
chatButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(getContext(), "Implement the start activity for chat", Toast.LENGTH_SHORT).show();
}
});
builder.setView(view);
return builder.create();
}
我尝试在github页面上查看示例应用Blurred Dialog Github
但它仅显示如何激活对话框,而不是在用户选择对话框中的项目时如何实际关闭对话框。其他一切工作都很完美,如果我单击一个项目就会启动正确的活动,如果我在对话框外单击该对话框就会关闭。我只需要在用户单击对话框中的项目后以编程方式关闭它。谢谢。
答案 0 :(得分:1)
而不是final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity())
使用final AlertDialog builder = new AlertDialog.Builder(getActivity()).create()
创建对话框,并在显示dialog.show()
等视图后显示对话框。
当用户点击屏幕上的内容时,您可以使用dialog.dismiss()
之类的对话框对象关闭对话框,即在您的关注按钮内点击
followButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialog.dismiss()
//YOUR CODE SHOULD COME HERE
}
});
答案 1 :(得分:0)
根据开发者网站https://developer.android.com/reference/android/app/DialogFragment.html
&#34;请注意,在这种情况下,片段不会放在后端堆栈上,它只是作为无限期运行的片段添加。由于对话框通常是模态的,因此对话框将捕获用户输入,直到它被解除为止。当它被解雇时,DialogFragment会负责将自己从片段管理器中删除。&#34;
也许如果你打电话给dismiss()它会起作用。
公共方法 void dismiss() 关闭片段及其对话框。