android已经点击,【已解决】android中点击其他的(如Button等)但是EditText却没有失去焦点...

【问题】

android的app中,在对于EditText已经实现了:OnFocusChangeListener mFocusChangedListener;

EditText variableValueView = (EditText) variableLayout.findViewById(R.id.variableValue);

EditText variableValueView = (EditText) variableLayout.findViewById(R.id.variableValue);

mFocusChangedListener = new OnFocusChangeListener() {

@Override

public void onFocusChange(View v, boolean hasFocus) {

if(hasFocus){

}else {

}

}

};

而且也是达到预期的,当点击可编辑的EditText时,得到focus,

点击其他(已经被设置为不可编辑,但是可点击,可以获得焦点的)EditText时,焦点是可以失去的。

但是有个问题:

当点击其他(菜单)按钮时,EditText却没有像所希望的失去焦点。

【解决过程】

1.搜:

android edittext not lose focus when click other button

和:

edittext click other not lost focus

参考:

倒是想到:

对于此处,希望的是,点击Menu的菜单的话,则可以对于那些Button或Menu,去复写对应的onClick

事件,然后其中取消掉当前的EditText的焦点(如果当前的焦点是处于在某个EditText上面的话)

应该就可以了。

2.不过,对于此种做法,对于我当前的app来说,还不是最优的做法。

所以,还要先去试试:

把EditText中的值,如果有任何改动,就都调用我此处程序中的validate,然后同时获得反馈,并更新对应的UI(即variable的status)

这样,就不用关系EditText是否获得或失去focus了。

所以去:

3.但是由于此处程序的逻辑有些特殊,会导致死循环,所以暂时放弃上面办法,还是继续此处的办法:

当EditText点击到别的Button或Menu时,让其失去焦点,从而使得变量值可以得到校验是否有效。

然后去看了看,此处不是button,所以没法复写onClick,然后只能在原先的menu的onOptionsItemSelected中去加代码,如下:@Override

public boolean onOptionsItemSelected(MenuItem item) {

//clear current var value EditText focus

View curView = getCurrentFocus();

//if((null != curView) && (curView instanceof EditText) && (curView.isEnabled())){

if(isEditableEditText(curView)){

//being in Edit Mode

curView.clearFocus();

}

// Handle item selection

switch (item.getItemId()) {

case R.id.menu_discard:

...

return true;

case R.id.menu_send:

...

return true;

case R.id.menu_settings:

...

return true;

default:

return super.onOptionsItemSelected(item);

}

}

但是还是不能解决我此处问题:

希望是,在点击了Menu后,在onOptionsItemSelected之前,就能够clear掉之前EditText的focus,

这样才能有机会去validate,然后接着调用到onOptionsItemSelected时,对于R.id.menu_send,才能去执行对应的send的动作,去写入新的值。

4.所以还要再去,找到如何在Menu的onOptionsItemSelected之前,就将EditText的焦点的办法。

搜:

android activity click

和:

android activity onclick event

参考:

另外通过:

找到官网的:

但是却没有找到任何和click有关的

5.参考:

去尝试给ActionBarActionBar(?)中,加上onClick

但是另外搜:

android menu onclick

参考:

是可以给每个menu的item的xml中加上:android:onClick="doThis"

但是很明显,对于每个都加,显得效率很低。

所以暂时不用这个办法。

6.参考:

中的解释:

对于来说,有个:

android:onClickMethod name. The method to call when this menu item is clicked. The method must be declared in the activity as public and accept a

以及对应的示例代码:

android:title="@string/item1"

android:icon="@drawable/group_item1_icon"

android:showAsAction="ifRoom|withText"/>

android:onClick="onGroupItemClick"

android:title="@string/group_item1"

android:icon="@drawable/group_item1_icon" />

android:onClick="onGroupItemClick"

android:title="@string/group_item2"

android:icon="@drawable/group_item2_icon" />

android:title="@string/submenu_title"

android:showAsAction="ifRoom|withText" >

android:title="@string/submenu_item1" />

和:public void onGroupItemClick(MenuItem item) {

// One of the group items (using the onClick attribute) was clicked

// The item parameter passed here indicates which item it is

// All other menu item clicks are handled by onOptionsItemSelected()

}

所以此处就可以去:

将我此处所关心的几个menu的item,弄到一个group中,

然后对于整个的group,弄一个onClick

在其中,做自己需要的处理:clear掉当前EditText的focus

这样估计就可以了。

去试试:

android:id="@+id/menu_discard"

android:icon="@drawable/error_white"

android:orderInCategory="1"

android:showAsAction="ifRoom|withText"

android:onClick="onMenuGroupEditClick"

android:title="@string/discard"/>

android:id="@+id/menu_send"

android:icon="@drawable/forward_white"

android:orderInCategory="2"

android:showAsAction="ifRoom|withText"

android:onClick="onMenuGroupEditClick"

android:title="@string/send"/>

android:id="@+id/menu_settings"

android:icon="@drawable/settings"

android:orderInCategory="3"

android:showAsAction="ifRoom|withText"

android:title="@string/settings"/>

然后去实现。

但是折腾期间,结果发现问题:

代码中的注释:// One of the group items (using the onClick attribute) was clicked

// The item parameter passed here indicates which item it is

// All other menu item clicks are handled by onOptionsItemSelected()

的含义很清楚:

如果此处menu的item实现了自己的onClick,那么,其的确是先于

onOptionsItemSelected

去处理的,但是却导致

onOptionsItemSelected不会被调用了。。。

只会被你自己的onClick事件所处理

所以导致结果是:

即使此处实现了group中的item的onClick事件,那么其中要处理的内容(取消EditText的focus)和后续

类似于onOptionsItemSelected中的switch..case中处理对应item的内容,

也是先后顺序就执行了,中间就没有间隔了。

而这不是我要的,我要的是,先(取消EditText的focus)后(更新对应的值)

中间必须有间隔才行的。。。

7.目前实在很无奈的是,只能去试试:@Override

public boolean onOptionsItemSelected(MenuItem item) {

//clear current var value EditText focus

View curView = getCurrentFocus();

//if((null != curView) && (curView instanceof EditText) && (curView.isEnabled())){

if(isEditableEditText(curView)){

curView.clearFocus();

}

// Handle item selection

switch (item.getItemId()) {

case R.id.menu_discard:

//Toast.makeText(MainActivity.this, "Menu Discard cliked", Toast.LENGTH_SHORT).show();

clearEditedVarValues();

return true;

case R.id.menu_send:

//Toast.makeText(MainActivity.this, "Menu Send cliked", Toast.LENGTH_SHORT).show();

writeEditedVarValues();

return true;

case R.id.menu_settings:

return true;

default:

return super.onOptionsItemSelected(item);

}

}

中的clearFocus,能否直接触发系统事件,从而导致别的相关代码(EditText的OnFocusChangeListener)被调用

然后再回来继续去执行对应的writeEditedVarValues等内容。

结果发现是可以的:

当执行了:curView.clearFocus();

接着会执行到对应的EditText的OnFocusChangeListener的,其中会去执行validate

然后接着可以再执行onOptionsItemSelected中的writeEditedVarValues了。

【总结】

此处,是间接实现最原始的目的:

当点击Menu中的一个子菜单item时,原先的EditText并没有失去焦点

的,办法是:

当点击了Menu的item时,此时去获得当前焦点,判断是所关心的EditText时,再去调用clearFocus去主动失去焦点,即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/347535.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简洁明了!Java实现单向环形链表以解决约瑟夫环Josepfu问题

文章目录简单介绍代码实现简单介绍 如果把单链表的最后一个节点的指针指向链表头部,而不是指向NULL,那么就构成了一个单向循环链表,通俗讲就是让尾节点指向头结点。 单向环形链表应用场景:Josephu(约瑟夫、约瑟夫环)问题&#xf…

荣耀v10Android9新功能,荣耀10、荣耀V10开启安卓9.0内测 日常领跑行业

【PConline 资讯】今天(8月9日)早上10点,荣耀总裁赵明发微博宣布荣耀已经有四款机型面向少部分用户推送安卓9.0内部测试版本。实际上,在8月8日晚上,花粉论坛就已经公布华为4款机型内测安卓 9.0 版本,荣耀手机两款旗舰进入升级名单…

状态模式 设计模式_设计模式:状态

状态模式 设计模式本文将介绍状态设计模式 。 它是行为设计模式之一 。 您无需了解许多理论即可了解模式的主要概念。 该文章将分为几个部分,在其中我将提供有关需要应用该模式的情况,它所具有的利弊以及用法示例的信息。 有时,当对象的内部…

字符串得结果!Java数组模拟栈以实现中缀表达式综合计算器,字符串表达式计算器

文章目录数组模拟栈类中缀表达式计算器类(测试类)数组模拟栈类 主要实现栈的一些基本功能,以及在该场景下的功能。 //先创建一个栈 class AStack {private int maxSize; //栈的大小private int[] stack; //数组模拟栈private int top -1; …

android webview javascript不执行,WebView中的JavaScript为什么不执行?

浏览器未开启javascript使用的js代码有问题,webview不兼容该代码。1) 第一个坎:WebSettingsWebSettings webSettings mWebView.getSettings();webSettings.setJavaScriptEnabled(true);2) 第二个坎: 有物在运行脚本前,要有docume…

中缀转后缀表达式,带括号的后缀表达式综合计算器,Java栈数据结构实现

文章目录中缀表达式转后缀表达式思路逆波兰表达式计算思路代码实现中缀表达式转后缀表达式思路 1、初始化两个栈:运算符栈s1和储存中间结果的栈s2 2、从左至右扫描中缀表达式 3、遇到操作数时,将其压入s2 4、遇到运算符时,比较其与s1栈顶…

Java中的AES加密和解密(CBC模式)

通过有线方式传输诸如纯文本密码之类的机密数据总是容易受到安全性的影响,始终建议对此类信息进行加密并使用SSL传输这些机密数据.Java为此提供了多种加密算法。在本文中,我们将讨论Java中具有CBC模式的AES(高级加密标准)对称加密…

hiti打印机android驱动,HiTi 打印机 驱动程序下载——更新 HiTi 软件

HiTi 打印机驱动程序下载如何手动下载和更新:你可以通过 %%os%% 或通过执行 Windows 更新获取基本的 HiTi Printer 驱动程序。 内置驱动程序将支持Printer的基本功能,但通常不支持更高级的功能。以下是手动更新这些 HiTi 设备驱动程序的完整指南。程序员: HiTi 类别…

Java实现最小二乘法线性拟合,传感与检测,单臂半桥全桥实验,江南大学自动化

因为作为资源上传不方便我们获取且我想免费分享给有需要的小伙伴,以后所有实验报告都通过文章形式记录输出了,仅供参考,欢迎交流。(最小二乘法代码在文末) 电桥特性曲线: Java实现最小二乘法线性拟合及计算…

android task详解,Android AsyncTask的使用详解

当然,我们在进行耗时操作或者更新UI时,是可以使用匿名线程的,但是此种方式是存在缺陷的:第一,线程的开销较大,如果每个任务都要创建一个线程,那么应用 程序的效率要低很多;第二&…

【Error】IDEA报错:org.jetbrains.jps.builders.java.dependencyView.TypeRepr$PrimitiveType cannot be cast t

错误日志: org.jetbrains.jps.builders.java.dependencyView.TypeRepr$PrimitiveType cannot be cast to org.jetbrains.jps.builders.java.dependencyView.TypeRepr$ClassType 解决方法:

ReSQL的?

大约在2009年创造出来的NoSQL名字标志着从“传统”关系模型的转变。 在2009年之前,有相当多的非关系数据库,但是在最近几年中,我们看到了许多新产品(例如, 我在上一篇文章中可以看到“ NoSQL格局” )。 一般…

数据结构,Java实现递归回溯,寻找出迷宫路线,解决迷宫问题

/*** Author: Yeman* Date: 2021-10-28-22:52* Description:*/ public class Labyrinth {public static void main(String[] args) {//七行八列的迷宫地图int[][] map new int[8][7];//设置墙for (int i 0; i < 7; i) {map[0][i] 1;map[7][i] 1;}for (int i 0; i < …

android动画优缺点,Android动画总结

动画分为三种&#xff1a;View动画、帧动画和属性动画View动画View动画共有四种动画&#xff1a;TranslateAnimation、RotateAnimation、ScaleAnimation和AlphaAnimation。四个动画类都继承于抽象类Animation。名称标签子类效果平移动画TranslateAnimation移动View缩放动画Scal…

Java 11将包含更多功能

Java 11中即将推出的功能是什么&#xff1f;它与Java 9和10有何不同&#xff1f; Java 10可能是新手&#xff0c;但现在该谈论Java 11了。Oracle迈向更快的发布周期意味着更多的特性和功能以比以往更快的速度出现。 尽管距离Java 11发行还有六个月的时间&#xff0c;但我们已…

Java实现递归回溯,解决八皇后问题,数据结构与算法

文章目录八皇后问题解决思路代码实现运行结果八皇后问题 八皇后问题&#xff0c;是一个古老而著名的问题&#xff0c;是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯贝瑟尔于1848年提出&#xff1a;在8X8格的国际象棋上摆放八个皇后&#xff0c;使其不能互相攻击&#x…

HTML JS正方形轮播,js,html一个页面里面多个页面轮播

这种轮播都是div或者图片的&#xff0c;div能换成iframe显示嵌套网页吗&#xff1f;或者请问有没有其他方法能实现多个页面轮播&#xff1f;我写了三个iframeframeborder"no" border"0" marginwidth"0" marginheight"0" scrolling&quo…

html在screen检索屏幕分辨率,Electron开发之screen模块-根据屏幕分辨率设置窗口大小...

使用 Electron screen 模块可对屏幕进行相关操做screen 模块检索屏幕的 size&#xff0c;显示&#xff0c;鼠标位置等的信息,在 app 模块的ready 事件触发以前不可以使用这个模块.html注意: 在渲染进程 / 开发者工具栏, window.screen 是一个预设值的 DOM 属性, 因此这样写 var…

html制作任务计划列表网页,添加计划任务的脚本

在windows中怎样用bat或者vbs添加计划任务..例如.我想在每次开机10分钟后运行windows目录中的XX.exe文件。应该怎么弄写了一个bat的备份脚本&#xff0c;在添加计划任务的时候&#xff0c;出你可以把 运行的帐号制定成管理员&#xff0c;不要任意用户。200分。用批处理或DOS添加…