不要在项目单击时将文本值设置为 AutoCompleteTextView

Dan*_*nie 4 java android kotlin

我的屏幕上有一个 AutocompleteTextView。默认情况下,当用户单击 autocompletetextviews 下拉项中的项时,它会将这个 autocompletetextview 的文本设置为这个选定项的值。

有什么办法可以禁用它吗?那么当用户点击下拉项目时,只会onItemClickListener触发?

将值设置为 "" inonItemClickListener不是一个选项。

autoCompleteTextView.setOnItemClickListener { adapterView, view, i, l -> 
    autoCompleteTextView.setText("")
}
Run Code Online (Sandbox Code Playgroud)

因为我需要我TextWatcher的不被触发

Ben*_* P. 8

AutoCompleteTextView 使用此类来检测其下拉列表中的点击:

private class DropDownItemClickListener implements AdapterView.OnItemClickListener {
    public void onItemClick(AdapterView parent, View v, int position, long id) {
        performCompletion(v, position, id);
    }
}
Run Code Online (Sandbox Code Playgroud)

在该performCompletion()方法中,有一个实际更改 TextView 内容的调用:

replaceText(convertSelectionToString(selectedItem));
Run Code Online (Sandbox Code Playgroud)

这个replaceText()方法是protected,这意味着你可以创建一个 的子类AutoCompleteTextView并覆盖它什么都不做:

public class MyAutoCompleteTextView extends AppCompatAutoCompleteTextView {

    public MyAutoCompleteTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void replaceText(CharSequence text) {
        // do nothing
    }
}
Run Code Online (Sandbox Code Playgroud)

现在只需用<AutoCompleteTextView>标签替换你的标签,<com.example.yourprojecthere.MyAutoCompleteTextView>你就应该准备好了。