如何使某些 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);
希望有用!
我正在做一个需要我开发自动完成输入建议框的项目,问题是建议项目已分类,每个类别都应该突出显示且不可点击。 为此,我已经实现了自定义 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);
希望有用!