【问题标题】:to pass a custom list view to an auto complete edit text将自定义列表视图传递给自动完成编辑文本
【发布时间】:2015-05-05 12:56:22
【问题描述】:

我正在尝试为我的适配器类 AutoCompleteTextView 传递一个自定义 ArrayList<>

AutoCompleteTextView companyName_autoComplete;
ArrayList<SearchCPS> searchCPSList = new ArrayList<SearchCPS>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_profile_startup);

    companyName_autoComplete = (AutoCompleteTextView) findViewById(R.id.companyName_autoComplete);

    SearchCPS_WS();
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_dropdown_item_1line, searchCPSList);

}

这里它接受 searchCPSList,因为它不是 List 类型。谁能在不使用任何外部库的情况下帮我解决这个问题。

【问题讨论】:

  • 你能显示你得到错误的代码吗?
  • 贴出你试过的代码
  • 没有您的代码?没有
  • 您的列表中没有值

标签: android arraylist android-arrayadapter autocompletetextview


【解决方案1】:

我们可以为 Autocompletetextview 创建自定义 arrayadapter

import java.util.ArrayList;

import android.content.Context;

import android.view.View;

import android.view.ViewGroup;

import android.widget.ArrayAdapter;

import android.widget.Filter;

import android.widget.Filterable;

public class AutoCompleteAdapter extends ArrayAdapter<EmployeeModel> implements
    Filterable {

private ArrayList<EmployeeModel> fullList;
private ArrayList<EmployeeModel> mOriginalValues;
private ArrayFilter mFilter;

public AutoCompleteAdapter(Context context, int resource,
        int textViewResourceId, ArrayList<EmployeeModel> fullList) {

    super(context, resource, textViewResourceId, fullList);
    this.fullList = fullList;
    mOriginalValues = new ArrayList<EmployeeModel>(fullList);

}

@Override
public int getCount() {
    return fullList.size();
}

@Override
public EmployeeModel getItem(int position) {
    return fullList.get(position);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    return super.getView(position, convertView, parent);
}

@Override
public Filter getFilter() {
    if (mFilter == null) {
        mFilter = new ArrayFilter();
    }
    return mFilter;
}

private class ArrayFilter extends Filter {
    private Object lock;

    @Override
    protected FilterResults performFiltering(CharSequence prefix) {
        FilterResults results = new FilterResults();

        if (mOriginalValues == null) {
            synchronized (lock) {
                mOriginalValues = new ArrayList<EmployeeModel>(fullList);
            }
        }

        if (prefix == null || prefix.length() == 0) {
            synchronized (lock) {
                ArrayList<EmployeeModel> list = new ArrayList<EmployeeModel>(
                        mOriginalValues);
                results.values = list;
                results.count = list.size();
            }
        } else {
            final String prefixString = prefix.toString().toLowerCase();

            ArrayList<EmployeeModel> values = mOriginalValues;
            int count = values.size();

            ArrayList<EmployeeModel> newValues = new ArrayList<EmployeeModel>(count);

            for (int i = 0; i < count; i++) {
                EmployeeModel item = values.get(i);
                if (item.getEmployeeName().toLowerCase().contains(prefixString)) {
                    newValues.add(item);
                }

            }

            results.values = newValues;
            results.count = newValues.size();
        }

        return results;
    }

    @SuppressWarnings("unchecked")
    @Override
    protected void publishResults(CharSequence constraint,
            FilterResults results) {

        if (results.values != null) {
            fullList = (ArrayList<EmployeeModel>) results.values;
        } else {
            fullList = new ArrayList<EmployeeModel>();
        }
        /*if (results.count > 0) {
            notifyDataSetChanged();
        } else {
            notifyDataSetInvalidated();
        }*/
        notifyDataSetChanged();
        clear();
        for (int i = 0, l = fullList.size(); i < l; i++)
            add(fullList.get(i));
        notifyDataSetInvalidated();

    }
}
}

将 Arraylist 设置为具有 list,textview 的适配器

  AutoCompleteAdapterdemo adapter = new AutoCompleteAdapterdemo(LandingActivity.this,
                    R.layout.list_item, R.id.textView1, arraylist_searchName_Demo);

其中 list_item 是我们必须在项目中创建的 xml,textView1 是 list_item.xml 中的 textview

现在将适配器设置为 AutoCompleteTextView

  Search_Name.setDropDownHeight(200);
            Search_Name.setThreshold(1);
            Search_Name.setAdapter(adapter);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-15
    相关资源
    最近更新 更多