【发布时间】:2017-10-05 14:20:15
【问题描述】:
我在 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
但它只显示了如何激活对话框,而不是当用户选择对话框中的项目时如何实际关闭它。其他一切工作正常,如果我单击一个项目,它会启动正确的活动,如果我在对话框外单击,则对话框关闭。我只需要在用户单击对话框中的项目后以编程方式关闭它。谢谢。
【问题讨论】:
-
看起来您应该使用 DialogFragment,因为它是框架的一部分,并且与 Blurred Dialog(三年未更新)完全相同。如果您使用 DialogFragment,您可以只使用 dismiss() 方法,请参见此处:developer.android.com/reference/android/app/…