gpt4 book ai didi

android - 如何在保持专注的同时使用 EditText onClick 方法

转载 作者:行者123 更新时间:2023-11-30 01:23:23 31 4
gpt4 key购买 nike

我有一个 EditText,它附有一个 ListPopupWindow,其中列出了最近的搜索查询。当用户单击 EditText 时,弹出窗口应该显示,然后当用户开始输入时,弹出窗口应该消失。

这主要是使用 OnFocusChangeListenerOnTextChangedListenerOnEditorActionListener。但是,如果用户单击了 EditText,开始键入,然后再次单击 EditText,我需要弹出窗口重新出现。我曾尝试使用 OnClickListener 而不是 OnFocusChangeListener,但永远无法使用 OnClickListener 显示弹出窗口。

如果 ListPopUpWindow 已获得焦点,我如何才能在用户单击 EditText 时显示它?

searchBox.setOnFocusChangeListener(new View.OnFocusChangeListener() {
public void onFocusChange(View v, boolean gainFocus) {
//onFocus
if (gainFocus) {
popUpWindow.show();
}
}
});

在用户开始在 EditText 字段中输入时关闭弹出窗口

searchBox.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {

}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {

}

@Override
public void afterTextChanged(Editable s) {
popUpWindow.dismiss();
}
});

清除焦点、关闭弹出窗口并执行搜索

searchBox.setOnEditorActionListener(new TextView.OnEditorActionListener() {
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if ((actionId & v.getImeOptions()) == actionId) {
if (event != null && event.getAction() == KeyEvent.ACTION_DOWN) {
if (searchBox.getText().toString().length() == 0) return true;
searchBox.clearFocus();
popUpWindow.dismiss();
fetchResults();
Util.hideKeyboard(v);
return true;
}
}
return false;
}
});

最佳答案

您可以尝试将焦点更改监听器替换为触摸监听器,并在发生 MOTION_UP 事件时显示弹出窗口:

    editText.setOnTouchListener(new OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
if ((event.getAction() == MotionEvent.ACTION_UP) {
// Show popup here
}
return false;
}
});

关于android - 如何在保持专注的同时使用 EditText onClick 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36770850/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com