Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为AutoCompleteTextView使用自定义适配器_Java_Android_Autocompletetextview_Custom Adapter - Fatal编程技术网

Java 如何为AutoCompleteTextView使用自定义适配器

Java 如何为AutoCompleteTextView使用自定义适配器,java,android,autocompletetextview,custom-adapter,Java,Android,Autocompletetextview,Custom Adapter,我使用的是带有自定义适配器的AutoCompleteTextView,但适配器似乎没有任何作用。当我输入两个字母时,下拉列表不会显示。我将一些随机单词的数组列表插入适配器。我还确保我确实将适配器设置为textview,但什么也没发生。当我使用ArrayAdapter时,它起了作用。有人能告诉我我的代码出了什么问题以及如何修复它吗?提前谢谢 这是我的适配器 package com.chappota.weather.list.model; import android.content.Contex

我使用的是带有自定义适配器的AutoCompleteTextView,但适配器似乎没有任何作用。当我输入两个字母时,下拉列表不会显示。我将一些随机单词的数组列表插入适配器。我还确保我确实将适配器设置为textview,但什么也没发生。当我使用ArrayAdapter时,它起了作用。有人能告诉我我的代码出了什么问题以及如何修复它吗?提前谢谢

这是我的适配器

package com.chappota.weather.list.model;

import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;

/**
 * Created by Pranav on 11/10/2014.
 */
public class CityDropDownAdapter extends BaseAdapter implements Filterable {

ArrayList<String> mList;
Context mContext;

public CityDropDownAdapter(Context ctx, ArrayList<String> list) {
    mList = list;
    mContext = ctx;
}

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

@Override
public Object getItem(int position) {
    return mList.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View mView = convertView;
    if (mView == null) {
        LayoutInflater vi = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mView = vi.inflate(android.R.layout.simple_dropdown_item_1line, null);
    }

    TextView suggestion = (TextView) mView.findViewById(android.R.id.text1);
    suggestion.setText(mList.get(position));
    suggestion.setTextColor(Color.BLACK);

    return mView;
}

@Override
public Filter getFilter() {
    return new CityFilter();
}

private class CityFilter extends Filter {

    @Override
    public String convertResultToString(Object resultValue) {
        return (resultValue.toString());
    }

    @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        if (constraint != null) {
            ArrayList<String> mData = mList;
            ArrayList<String> mSuggestions = mList;

            mSuggestions.clear();

            //Check for similarities in data from constraint
            for (String value : mData) {
                if (value.toLowerCase().contains(constraint.toString().toLowerCase())) {
                    mSuggestions.add(value);
                    Toast.makeText(mContext, value + " contains " + constraint.toString(), Toast.LENGTH_LONG).show();
                } else {
                    Toast.makeText(mContext, value + " does not " + constraint.toString(), Toast.LENGTH_LONG).show();

                }
            }

            FilterResults filterResults = new FilterResults();
            filterResults.values = mSuggestions;
            filterResults.count = mSuggestions.size();
            return filterResults;
        } else {
            return null;
        }
    }

    @Override
    protected void publishResults(CharSequence constraint, FilterResults results) {
        if (results != null && results.count > 0) {
            notifyDataSetChanged();
        }
    }
}
}
package com.chappota.weather.list.model;
导入android.content.Context;
导入android.graphics.Color;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.BaseAdapter;
导入android.widget.Filter;
导入android.widget.Filterable;
导入android.widget.TextView;
导入android.widget.Toast;
导入java.util.ArrayList;
/**
*由Pranav于2014年11月10日创建。
*/
公共类CithydropDownAdapter扩展BaseAdapter实现可过滤{
阵列列表;
语境;
公共CityDropDownAdapter(上下文ctx、ArrayList列表){
mList=列表;
mContext=ctx;
}
@凌驾
public int getCount(){
返回mList.size();
}
@凌驾
公共对象getItem(int位置){
返回mList.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图mView=转换视图;
if(mView==null){
LayoutInflater vi=(LayoutInflater)mContext.getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
mView=vi.inflate(android.R.layout.simple\u dropdown\u item\u 1line,null);
}
TextView建议=(TextView)mView.findviewbyd(android.R.id.text1);
suggestion.setText(mList.get(position));
建议:setTextColor(颜色:黑色);
返回mView;
}
@凌驾
公共过滤器getFilter(){
返回新的CityFilter();
}
私有类CityFilter扩展了筛选器{
@凌驾
公共字符串ConvertResultString(对象结果值){
return(resultValue.toString());
}
@凌驾
受保护的筛选器结果性能筛选(CharSequence约束){
if(约束!=null){
ArrayList mData=mList;
ArrayList mSuggestions=mList;
mSuggestions.clear();
//检查约束中数据的相似性
for(字符串值:mData){
if(value.toLowerCase().contains(constraint.toString().toLowerCase())){
m建议。增加(价值);
Toast.makeText(mContext,value+”包含“+constraint.toString(),Toast.LENGTH_LONG).show();
}否则{
Toast.makeText(mContext,value+“不”+constraint.toString(),Toast.LENGTH_LONG.show();
}
}
FilterResults FilterResults=新的FilterResults();
filterResults.values=m建议;
filterResults.count=mSuggestions.size();
返回过滤器结果;
}否则{
返回null;
}
}
@凌驾
受保护的void publishResults(CharSequence约束、FilterResults结果){
if(results!=null&&results.count>0){
notifyDataSetChanged();
}
}
}
}

有人能告诉我我做错了什么,我该如何改正吗?提前谢谢

您在这里提供参考

            ArrayList<String> mData = mList;
            ArrayList<String> mSuggestions = mList;
这就是为什么循环并没有数据,也并没有工作

而是声明一个新对象,如下所示

            ArrayList<String> mData = new ArrayList<String>(mList);
            ArrayList<String> mSuggestions = new ArrayList<String>(mList);
ArrayList mData=新的ArrayList(mList);
ArrayList mSuggestions=新的ArrayList(mList);

你到底想做什么?如果ArrayAdapter可用,为什么不使用它?出于某种原因,下拉列表的文本颜色是白色而不是黑色,因此我需要一个自定义适配器来修复它,以便使用自定义布局并将其传递给ArrayAdapter构造函数谢谢!这真的很有帮助,我不敢相信我忘了早点做这件事。但是,我还有另一个问题——如果解决方案不是那么简单,是什么让我的上述代码工作的呢?
            ArrayList<String> mData = new ArrayList<String>(mList);
            ArrayList<String> mSuggestions = new ArrayList<String>(mList);