我在MyFragment
内MyActivity
。 MyFragment
包含Dialog
,用作权限解释器。我使用Animator
为AlertDialog
设置了动画。
我在代码中的位置没有调用Toast或Snackbar或其他任何东西。所以我确信没有toast与android的权限视图进行交互。
public void showPermissionExplainer() {
final View dialogView = View.inflate(getActivity(), R.layout.dialog_permission_explainer_view, null);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setView(dialogView);
final AlertDialog permissionExplainer = builder.create();
permissionExplainer.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
revealShow(dialogView, true, null, false);
else
permissionExplainer.dismiss();
}
});
dialogView.findViewById(R.id.btnNo).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
revealShow(dialogView, false, permissionExplainer, false);
else
permissionExplainer.dismiss();
}
});
dialogView.findViewById(R.id.btnContinue).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
revealShow(dialogView, false, permissionExplainer, true);
else
permissionExplainer.dismiss();
}
});
if (permissionExplainer.getWindow() != null)
permissionExplainer.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
permissionExplainer.show();
}
revealShow()
是我在对话框中设置动画并包含onAnimationEnd
方法的地方。
接下来我认为动画可能是一个问题,因为对话框稍后会被解雇。因此,我在动画完成后请求许可并查看隐藏和
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
dialog.dismiss();
view.setVisibility(View.INVISIBLE);
if(askForPermission) {
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
Log.d(TAG, "run: Running after 1 sec");
requestPermissions(new String[]{Manifest.permission.READ_SMS}, MY_PERMISSIONS_REQUEST_READ_SMS);
}
}, 1000);
}
}
不幸的是,这也没有解决问题。然后我尝试延迟询问解决问题的权限,但前提是我延迟了至少2-3秒。延迟1秒,我仍然遇到了问题。
我的问题是,如何准确找出导致此行为的原因? 此外,对于片段内的对话框,此行为是否正常?