日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/12/2 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android已经点击,【已解决】android中点击其他的(如Button等)但是EditText却没有失去焦点... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

【問(wèn)題】

android的app中,在對(duì)于EditText已經(jīng)實(shí)現(xiàn)了: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 {

}

}

};

而且也是達(dá)到預(yù)期的,當(dāng)點(diǎn)擊可編輯的EditText時(shí),得到focus,

點(diǎn)擊其他(已經(jīng)被設(shè)置為不可編輯,但是可點(diǎn)擊,可以獲得焦點(diǎn)的)EditText時(shí),焦點(diǎn)是可以失去的。

但是有個(gè)問(wèn)題:

當(dāng)點(diǎn)擊其他(菜單)按鈕時(shí),EditText卻沒(méi)有像所希望的失去焦點(diǎn)。

【解決過(guò)程】

1.搜:

android edittext not lose focus when click other button

和:

edittext click other not lost focus

參考:

倒是想到:

對(duì)于此處,希望的是,點(diǎn)擊Menu的菜單的話,則可以對(duì)于那些Button或Menu,去復(fù)寫(xiě)對(duì)應(yīng)的onClick

事件,然后其中取消掉當(dāng)前的EditText的焦點(diǎn)(如果當(dāng)前的焦點(diǎn)是處于在某個(gè)EditText上面的話)

應(yīng)該就可以了。

2.不過(guò),對(duì)于此種做法,對(duì)于我當(dāng)前的app來(lái)說(shuō),還不是最優(yōu)的做法。

所以,還要先去試試:

把EditText中的值,如果有任何改動(dòng),就都調(diào)用我此處程序中的validate,然后同時(shí)獲得反饋,并更新對(duì)應(yīng)的UI(即variable的status)

這樣,就不用關(guān)系EditText是否獲得或失去focus了。

所以去:

3.但是由于此處程序的邏輯有些特殊,會(huì)導(dǎo)致死循環(huán),所以暫時(shí)放棄上面辦法,還是繼續(xù)此處的辦法:

當(dāng)EditText點(diǎn)擊到別的Button或Menu時(shí),讓其失去焦點(diǎn),從而使得變量值可以得到校驗(yàn)是否有效。

然后去看了看,此處不是button,所以沒(méi)法復(fù)寫(xiě)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);

}

}

但是還是不能解決我此處問(wèn)題:

希望是,在點(diǎn)擊了Menu后,在onOptionsItemSelected之前,就能夠clear掉之前EditText的focus,

這樣才能有機(jī)會(huì)去validate,然后接著調(diào)用到onOptionsItemSelected時(shí),對(duì)于R.id.menu_send,才能去執(zhí)行對(duì)應(yīng)的send的動(dòng)作,去寫(xiě)入新的值。

4.所以還要再去,找到如何在Menu的onOptionsItemSelected之前,就將EditText的焦點(diǎn)的辦法。

搜:

android activity click

和:

android activity onclick event

參考:

另外通過(guò):

找到官網(wǎng)的:

但是卻沒(méi)有找到任何和click有關(guān)的

5.參考:

去嘗試給ActionBarActionBar(?)中,加上onClick

但是另外搜:

android menu onclick

參考:

是可以給每個(gè)menu的item的xml中加上:android:onClick="doThis"

但是很明顯,對(duì)于每個(gè)都加,顯得效率很低。

所以暫時(shí)不用這個(gè)辦法。

6.參考:

中的解釋:

對(duì)于來(lái)說(shuō),有個(gè):

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

以及對(duì)應(yīng)的示例代碼:

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()

}

所以此處就可以去:

將我此處所關(guān)心的幾個(gè)menu的item,弄到一個(gè)group中,

然后對(duì)于整個(gè)的group,弄一個(gè)onClick

在其中,做自己需要的處理:clear掉當(dāng)前EditText的focus

這樣估計(jì)就可以了。

去試試:

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"/>

然后去實(shí)現(xiàn)。

但是折騰期間,結(jié)果發(fā)現(xiàn)問(wèn)題:

代碼中的注釋:// 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實(shí)現(xiàn)了自己的onClick,那么,其的確是先于

onOptionsItemSelected

去處理的,但是卻導(dǎo)致

onOptionsItemSelected不會(huì)被調(diào)用了。。。

只會(huì)被你自己的onClick事件所處理

所以導(dǎo)致結(jié)果是:

即使此處實(shí)現(xiàn)了group中的item的onClick事件,那么其中要處理的內(nèi)容(取消EditText的focus)和后續(xù)

類似于onOptionsItemSelected中的switch..case中處理對(duì)應(yīng)item的內(nèi)容,

也是先后順序就執(zhí)行了,中間就沒(méi)有間隔了。

而這不是我要的,我要的是,先(取消EditText的focus)后(更新對(duì)應(yīng)的值)

中間必須有間隔才行的。。。

7.目前實(shí)在很無(wú)奈的是,只能去試試:@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,能否直接觸發(fā)系統(tǒng)事件,從而導(dǎo)致別的相關(guān)代碼(EditText的OnFocusChangeListener)被調(diào)用

然后再回來(lái)繼續(xù)去執(zhí)行對(duì)應(yīng)的writeEditedVarValues等內(nèi)容。

結(jié)果發(fā)現(xiàn)是可以的:

當(dāng)執(zhí)行了:curView.clearFocus();

接著會(huì)執(zhí)行到對(duì)應(yīng)的EditText的OnFocusChangeListener的,其中會(huì)去執(zhí)行validate

然后接著可以再執(zhí)行onOptionsItemSelected中的writeEditedVarValues了。

【總結(jié)】

此處,是間接實(shí)現(xiàn)最原始的目的:

當(dāng)點(diǎn)擊Menu中的一個(gè)子菜單item時(shí),原先的EditText并沒(méi)有失去焦點(diǎn)

的,辦法是:

當(dāng)點(diǎn)擊了Menu的item時(shí),此時(shí)去獲得當(dāng)前焦點(diǎn),判斷是所關(guān)心的EditText時(shí),再去調(diào)用clearFocus去主動(dòng)失去焦點(diǎn),即可。

總結(jié)

以上是生活随笔為你收集整理的android已经点击,【已解决】android中点击其他的(如Button等)但是EditText却没有失去焦点...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。