android alertdialog横竖屏旋转_一个监控PLC的Android应用的开发过程-2

2023-05-16

2.5 交互对话框

2.5.1 DO交互对话框

对于DO的操作需求就是点击List中的Item,弹出交互对话框,由用户来选择“On/Off”?并最终写入到底层的PLC设备之中,并根据结果更新List。效果如下:

51e3da5f9f1d1698b49988ee91bb3af8.png

DO交互对话框

2.5.2 AO交互对话框

由于对于AO的操作需求有2种,分别是趋势查看需求和值设定需求,因此点击List的Item后需要先由用户选择要进行哪种操作?也就是与DO对比要增加一个操作选择对话框。在用户选择了操作类型后,弹出具体的操作对话框。

f8172558263e4f020dce7698ddcb9d3d.png

AO交互对话框

对于AO的值设定操作需求就是在交互对话框中显示要设定参数的名称,并可以输入设定值,点击确定后写入到PLC中。

4f61b7ddb3978b0f40147fd2dc7d9c97.png

AO设置对话框

2.6 图表(趋势)控件选择

1 对于AI和AO类型的数据项需要能够显示趋势图,X轴为时间、Y轴为值,查了很多资料选来选去,最终选择了“OxyPlot”。

2 Oxyplot是一个.NET跨平台的绘图组件,适用于WPF, Windows 8, Windows Phone, Windows Phone Silverlight, Windows Forms, Silverlight, GTK#, Xwt, Xamarin.iOS, Xamarin.Android, Xamarin.Forms and Xamarin.Mac.

3 官方网址:http://www.oxyplot.org/

4 这是一套绘图组件,不仅仅有我要用到的趋势,也包括饼图、柱状图等等,组件具体的过程就不详述了,网上都可以查到的。

5 问题:使用过程中趋势是动态实时更新的,但是遇到的问题是如果允许X或Y轴可以移动查看,那么在移动后趋势就不再实时更新了,是组件就是这样设定的?还是有什么参数可以进行设置?暂时的方法就是禁止X、Y轴移动,这样趋势就始终处于动态更新的状态。那位博友知道更好的解决方法?望告知,谢谢!

最后实现的效果如下:

997373d085e21e85d3764aeacd80e1b6.png

趋势效果

2.7 用户的新需求

在提交给用户后,用户感觉不错,朋友的100多万的项目也顺利拿下来了,不过用户也提出了2个新的需求(意料之中)。具体如下:

2.7.1 LIstView的长按和抬起操作

这个需求就是当长按ListView的Item项时,直接将相应DO设置为“On”,这时此阀门就是始终处于开状态(加料),然后当抬起(也就是松手)后将此DO设置为“Off”,也就是关闭阀门。这个需求其实并不困难,但前提是必须弄懂如何获取到长按和抬起这两个事件?

首先,目前系统中已经添加了Item的Click事件,如下:

protected void OnListItemClick(object sender, Android.Widget.AdapterView.ItemClickEventArgs e)

进而查看是否有其它事件?果然发现了LongClick事件,添加后如下:

protected void OnListItemLongClick(object sender, Android.Widget.AdapterView.ItemLongClickEventArgs e)

但是,测试后发现如果长按后OnListItemLongClick确实响应了,但是在抬起后Click事件并没有响应,然后又测试了”KeyPress”事件,发现这对应的是物理按键。又测试了”Touch”事件,发现此事件确实可以响应Down和Up两个事件,但是却不是针对Item的,获取的似乎是屏幕的坐标,也许经过相应的转换也可以得到对应的Item?不过我没有去研究!

最后,经过在网上查找发现了网友们都说将LongClick的返回值设置了为false就可以实现在松开后让Click响应,但是我的OnListItemLongClick是没有返回值的!What?不过我想应该不是网友们写的不对,应该是我没有搞懂!这就是使用C#的Xamarin的郁闷之处,资料太少了!好吧只能自己沉下心来继续研究,最后还是在MS提供的示例中找到了具体的实现方法,不是使用现成的事件,而是设置监听函数,代码如下:

        public class LongClickListener : Object, AdapterView.IOnItemLongClickListener        {            public MainActivity that;             public bool OnItemLongClick(AdapterView parent, View view, int position, long id)            {                if (that.ActionBar.SelectedNavigationIndex == 1 && position < that.nLongClickValidCount)                {// DO                    that.bLongClckDO = true;                    var item = ((HomeScreenAdapter)that.listView.Adapter).GetTableItem(position);                    that.SetItemDO(item.itemName, item.itemValue, true);                }                 return false;// false, 松开屏幕后Click事件响应;true,Click事件不响应。            }        }         public class ClickListener : Object, AdapterView.IOnItemClickListener        {            public MainActivity that;             public void OnItemClick(AdapterView parent, View view, int position, long id)            {                var item = ((HomeScreenAdapter)that.listView.Adapter).GetTableItem(position);                Toast.MakeText(that, item.itemName, Android.Widget.ToastLength.Short).Show();                switch (that.ActionBar.SelectedNavigationIndex)                {                    case 1:// DO                        that.SetItemDO(item.itemName, item.itemValue, false);                        break;                    case 2:// AI                        that.ShowDataChart(true, item.itemName);                        break;                    case 3:// AO                        that.ClickItemAO(item.itemName, item.itemValue);                        break;                    default:                        break;                }            }        }

2.7.2 增加网络连接状态的指示灯显示

目前的界面如下:

fac72449d20dbedc2a857a97ba71defc.png

界面显示

初步考虑,似乎没有合适的地方再增加一个指示灯了,于是想能否通过修改App的名称来增加状态显示?比如将现有的“液压起重“修改为”液压起重-状态:网络连接/网络断开”?研究了一下居然没弄懂怎么改!那位博友知道望告知,先谢了!虽然此种方式没有实现,但是无意间发现虽然文字不会改,但是背景色是可以改的,于是但网络断开连接的时候就变成了下面这样:

a17b49c4fb6fa8dc75fe88f9304cea31.png

断网显示

这样也算是变相的指示灯吧!

3.遇到的问题

3.1弹出对话框卡顿

现象描述:点击List中的item后,弹出的对话框有时会延时一会才弹出来。

问题调试:调试时发现在弹出对话框前的“OnListItemClick”事件中多加了一句“lock (lockDatas)”,而这个锁是用来进行数据读写同步,也就是在点击Item后需要等待当前的读写过程完成才能弹出对话框,也就是这导致了弹出延时,其实时没有必要的。

解决方法:删除语句“lock (lockDatas)”,问题解决。

3.2趋势显示卡顿

现象描述:当弹出趋势界面时,时常会出现卡住不现实趋势线,然后过一段时间后才显示出来的问题。

问题调试:这个问题调试起来复杂了一些,一个是跟上面的问题类似有同步的问题,而且同时还发现每次关闭趋势界面再打开发现多了一个线程在读取数据,或者换句话说就是关闭的趋势界面并没有真正退出,而是在后台继续运行。主要是线程没有退出导致的。

解决方法:1.正确同步;2.保证趋势界面关闭后线程随即退出。

3.3读取PLC数据的线程位置问题

起初写的代码循环读取PLC数据的线程我是放到了主界面也就是“Activity”的派生类中,但是测试过程中发现在通讯过程中只要一旋转设备屏幕,通讯就会中断重连?后来才发现原来旋转屏幕时整个“Activity”会重新创建,这样来看这种需要长期运行的实时数据读取线程就不适合放在“Activity”派生类中来实现了,那么放在哪了合适?我想到了“Application”的派生类,测试了一下,果然无论设备如何旋转此类都只有在初始时创建一次!

3.4对话框

交互对话框主要使用了“AlertDialog”,但是发现这既不是一个无模对话框也不是模态对话框,因为只要点击对话框外的其它地方此对话框就会消失?Android中的对话框都是这样的?那么有没有模态对话框?

3.5对话框

不知从什么时候开始在编辑*.axml文件时,当切换到“设计”模式是就是显示如下的错误对话框,而不是之前的窗口布局?

e4cfa3318da6c5d30f61032e4982e0df.png

错误显示

3.6 其它

其实过程中还有很多问题要解决,比如:

  • 如何修改ListView中Item的字体、颜色;
  • 如何设置APP的图标;
  • 如何制作APP的各个分辨率的图标;
  • 如何发布一个APP等等;

对于一个新手来说到处都是问题,当然如果对于一个具有一定编程经验的人来说也并不是很难,只是要进行一下相应的思路转换,找到在PC上对应的实现方法在Android上如何实现即可。

3.7 最终效果

dd7211f23df9dcf248f5c87b20c63322.png

最终应用效果

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android alertdialog横竖屏旋转_一个监控PLC的Android应用的开发过程-2 的相关文章

随机推荐