如何使某些 AutoCompleteTextView 建议项在 android 中无法选择

How to make some items of AutoCompleteTextView suggestion un-selectable in android

我正在做一个需要我开发自动完成输入建议框的项目,问题是建议项目已分类,每个类别都应该突出显示且不可点击。 为此,我已经实现了自定义 ArrayAdapter,但无法弄清楚如何使类别不可点击 这是我的自定义数组适配器代码

public class CustomAutoCompleteAdapter extends ArrayAdapter<String> {
    private static final int TYPE_ITEM = 0;
    private static final int TYPE_CATEGORY = 1;
    private TreeSet<Integer> sectionHeader = new TreeSet<Integer>();
    private LayoutInflater mInflater;


    public CustomAutoCompleteAdapter(@NonNull Context context, @LayoutRes int resource, @NonNull List<String> objects) {
        super(context, resource, objects);
        mInflater = LayoutInflater.from(context);
    }
    public int getItemViewType(int position) {
        return sectionHeader.contains(position) ? TYPE_CATEGORY : TYPE_ITEM;
    }

    public void addHeader(String item) {
        super.add(item);
        sectionHeader.add(this.getCount() - 1);
    }

    @Override
    public int getViewTypeCount() {
        return 2;
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        ViewHolder holder = null;
        if(convertView==null){
            int type = getItemViewType(position);
            holder = new ViewHolder();
            if(type == TYPE_ITEM){
                convertView = mInflater.inflate(R.layout.item_layout,null);
                holder.textView = (TextView) convertView.findViewById(R.id.text);
            }
            else{
                convertView = mInflater.inflate(R.layout.category_layout,null);
                holder.textView = (TextView) convertView.findViewById(R.id.category);
                convertView.setClickable(false);
            }
            convertView.setTag(holder);
        }
        else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.textView.setText(this.getItem(position));

        return convertView;
    }
    private static class ViewHolder {
        public TextView textView;
    }

}

在您的 CustomAutoCompleteAdapter 中,覆盖 isEnabled() 方法以禁用视图类型 TYPE_CATEGORY

在您的 CustomAutoCompleteAdapter 中添加以下代码:

@Override
public boolean isEnabled(int position) 
{
    return ((getItemViewType(position) != TYPE_CATEGORY));
}

希望对你有所帮助~

尝试通过同时设置您的 convertview 和 textview "unfocusable()" 来从视图中移除焦点。像这样:

convertView.setFocusable(false);
holder.textview.setFocusable(false);

希望有用!