1.因为我在掉用show的地方居然是在子线程里面,因为我切换线程干了很多事情,最后弹了个dialog。一直不显示,我打日志显示确实调用了show方法,就是不报错也不show,后来我反推代码,发现我线程没切换回来,一直是在子线程里面操作。
2.解决办法:
回到UI主线程,方式有几种,我这里写一种回到UI线程的方法。当然有部分回到UI线程的方法不起作用,具体原因我也不知道,欢迎大家评论留言。
Handler mainHandler = new Handler(Looper.getMainLooper());
//这是回到UI主线程的方法
mainHandler.post(() -> {
doSomething();
textView.setText("回到UI主线程,更新textView");
AlertDialog dialog = new AlertDialog.Builder(mContext).create();
//这里是加载布局
View convertView = createView(mContext,dialog);
dialog.setView(convertView, 0, 0, 0, 0); // 设置view 和左上右下的间距
dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialogInterface) {
}
});
dialog.getWindow().setBackgroundDrawableResource(R.drawable.drawable_round_edge);
dialog.getWindow().setGravity(Gravity.CENTER_HORIZONTAL);
//在这里调用显示弹窗,这个需要在主线程才能看到弹窗
dialog.show();
//设置窗口的大小
dialog.getWindow().setLayout(900, 900);
dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
});