项目中需要在网络断开连接时设置全局弹出框提醒,要求当网络断开的时候,在app内的任一页面均能弹出提示框提示用户网络断开,开始认为dialog需要依附在Activity上,后经查询可采取悬浮窗的模式,使其不必依附于Activity,可在任一页面弹出,代码如下:
[java] view plain copy
AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());
AlertDialog dialog=builder.setMessage("pc端断开连接,请及时保存编辑文档!")
.setPositiveButton("确定",new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
}).create();
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
dialog.setCanceledOnTouchOutside(false);//点击屏幕不消失
if (!dialog.isShowing()){//此时提示框未显示
dialog.show();
}
需添加dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);设置dialog的类型,同时要在清单文件中配置:
[java] view plain copy
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
添加该权限,若仍无法显示要到手机设置页面的,应用管理,找到自己的应用打开悬浮窗权限,若还是不行,可点击以下链接,寻找解决方法:
https://www.zhihu.com/question/37849134。
参考其他需要悬浮窗权限的app,都是默认不开启(测试机魅蓝note3),这就导致需要提醒用户设置,网上查阅资料,判断该权限是否开启,需要适配多种机型,极为不便,后经查询,可将dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);改为dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST);,此时不需要悬浮窗权限开启,该全局提示框亦可弹出。
---------------------------分割线-------------------------------------------------------
使用dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST);会遇到版本问题,在Android 4.4以下,TYPE_TOAST虽不需要权限亦可弹出,但是取消了界面交互功能,无法获取触摸事件,造成主动点击按钮,dialog不消失,因此需要版本判断,问题详情见以下链接:
http://www.jianshu.com/p/634cd056b90c
namespace ModuleB.ViewModels
{
public class MessageListViewModel : BindableBase
{
IEventAggregator _ea;
private ObservableCollection<string> _messages;
public ObservableCollection<string> Messages
{
get { return _messages; }
set { SetProperty(ref _messages, value); }
}
public MessageListViewModel(IEventAggregator ea)
{
_ea = ea;
Messages = new ObservableCollection<string>();
_ea.GetEvent<MessageSentEvent>().Subscribe(MessageReceived);
}
private void MessageReceived(string message)
{
Messages.Add(dasheng178.com/ message);
}
}
}
代码阅读:
private ObservableCollection<string> _messages;
public ObservableCollection<string> Messages
{
get { return _messages; }
set { SetProperty(ref _messages, value)www.yongshiyule178.com; }
}
这是 <ListBox ItemsSource="{Binding Messages}"www.huarenyl.cn/ /> 中的Messages,他的类型是ObservableCollection,具体为什么是 ObservableCollection而不是List!后面再说。
public MessageListViewModel(IEventAggregator ea)
{
_ea = ea;
Messages = new ObservableCollection<string>();
_ea.GetEvent<MessageSentEvent>(www.taohuayuan178.com).Subscribe(MessageReceived);
}
这里订阅了MessageSentEvent,并且处理Payload,dasheng178.com处理Payload的方法是MessageReceived,这个方法在Messages新增一条记录。
事件聚合器可以有多个发布者和多个订阅者。
标签: Prism, MVVM, ViewModel, Command, EventAggregator
好文要顶 关注我 收藏该文
丑拒
关注 - 10
粉丝 - 14
+加关注
0 0
« 上一篇:从PRISM开始学WPF(六)MVVM(二)Command?
posted @ 2018-04-03 13:12 丑拒 阅读(25) 评论(0) 编辑 收藏
[java] view plain copy
AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());
AlertDialog dialog=builder.setMessage("pc端断开连接,请及时保存编辑文档!")
.setPositiveButton("确定",new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
}).create();
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
dialog.setCanceledOnTouchOutside(false);//点击屏幕不消失
if (!dialog.isShowing()){//此时提示框未显示
dialog.show();
}
需添加dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);设置dialog的类型,同时要在清单文件中配置:
[java] view plain copy
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
添加该权限,若仍无法显示要到手机设置页面的,应用管理,找到自己的应用打开悬浮窗权限,若还是不行,可点击以下链接,寻找解决方法:
https://www.zhihu.com/question/37849134。
参考其他需要悬浮窗权限的app,都是默认不开启(测试机魅蓝note3),这就导致需要提醒用户设置,网上查阅资料,判断该权限是否开启,需要适配多种机型,极为不便,后经查询,可将dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);改为dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST);,此时不需要悬浮窗权限开启,该全局提示框亦可弹出。
---------------------------分割线-------------------------------------------------------
使用dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST);会遇到版本问题,在Android 4.4以下,TYPE_TOAST虽不需要权限亦可弹出,但是取消了界面交互功能,无法获取触摸事件,造成主动点击按钮,dialog不消失,因此需要版本判断,问题详情见以下链接:
http://www.jianshu.com/p/634cd056b90c
namespace ModuleB.ViewModels
{
public class MessageListViewModel : BindableBase
{
IEventAggregator _ea;
private ObservableCollection<string> _messages;
public ObservableCollection<string> Messages
{
get { return _messages; }
set { SetProperty(ref _messages, value); }
}
public MessageListViewModel(IEventAggregator ea)
{
_ea = ea;
Messages = new ObservableCollection<string>();
_ea.GetEvent<MessageSentEvent>().Subscribe(MessageReceived);
}
private void MessageReceived(string message)
{
Messages.Add(dasheng178.com/ message);
}
}
}
代码阅读:
private ObservableCollection<string> _messages;
public ObservableCollection<string> Messages
{
get { return _messages; }
set { SetProperty(ref _messages, value)www.yongshiyule178.com; }
}
这是 <ListBox ItemsSource="{Binding Messages}"www.huarenyl.cn/ /> 中的Messages,他的类型是ObservableCollection,具体为什么是 ObservableCollection而不是List!后面再说。
public MessageListViewModel(IEventAggregator ea)
{
_ea = ea;
Messages = new ObservableCollection<string>();
_ea.GetEvent<MessageSentEvent>(www.taohuayuan178.com).Subscribe(MessageReceived);
}
这里订阅了MessageSentEvent,并且处理Payload,dasheng178.com处理Payload的方法是MessageReceived,这个方法在Messages新增一条记录。
事件聚合器可以有多个发布者和多个订阅者。
标签: Prism, MVVM, ViewModel, Command, EventAggregator
好文要顶 关注我 收藏该文
丑拒
关注 - 10
粉丝 - 14
+加关注
0 0
« 上一篇:从PRISM开始学WPF(六)MVVM(二)Command?
posted @ 2018-04-03 13:12 丑拒 阅读(25) 评论(0) 编辑 收藏