Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.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
Android中扩展ArrayAdapter中的搜索项_Android_Listview_Search_Android Arrayadapter - Fatal编程技术网

Android中扩展ArrayAdapter中的搜索项

Android中扩展ArrayAdapter中的搜索项,android,listview,search,android-arrayadapter,Android,Listview,Search,Android Arrayadapter,我正在使用ArrayAdapter在ListView中显示列表项,一切正常,但我想从该列表中搜索项目。实际上,这些是包含姓名和电话的联系人列表。我只想按名字搜索 我为搜索编写了一些代码,其中没有错误,也没有任何运行时错误,但搜索功能不起作用 main活动 EditText contactSearch = (EditText) findViewById(R.id.contactSearch); contactSearch.addTextChangedListener

我正在使用
ArrayAdapter
ListView
中显示列表项,一切正常,但我想从该列表中搜索项目。实际上,这些是包含姓名和电话的联系人列表。我只想按名字搜索

我为搜索编写了一些代码,其中没有错误,也没有任何运行时错误,但搜索功能不起作用

main活动

        EditText contactSearch = (EditText) findViewById(R.id.contactSearch);
        contactSearch.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                contentAdapter.getFilter().filter(s);
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });
ContentAdapter

 public class ContentAdapter extends ArrayAdapter<String> {
private Context context;
private String[] names;
private String[] phones;
public static Dialog dialog;

/*ContentAdapter(Context ctx, List<String> rows){
    super(ctx, R.layout.contact_row,R.id.txtName, rows);
    context = ctx;
    dialog = new Dialog(context);
}*/
ContentAdapter(Context ctx, String[] name, String[] phone){
    super(ctx, R.layout.contact_row,R.id.txtName,name);
    context = ctx;
    names = name;
    phones = phone;
    dialog = new Dialog(context);
}

private class ViewHolder{
    TextView name, phone;
    ViewHolder(View view){
        name = (TextView) view.findViewById(R.id.txtName);
        phone = (TextView) view.findViewById(R.id.txtPhoneNumber);
        view.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                Toast.makeText(context, "Item click", Toast.LENGTH_SHORT).show();
                String phoneNumber = phone.getText().toString();
                String userName = name.getText().toString();
                //final Dialog dialog = new Dialog(context);
                dialog.setContentView(R.layout.custom_dialog);
                dialog.setTitle(userName);
                EditText etxtContactNumber = (EditText) dialog.findViewById(R.id.etxtContactNumber);
                etxtContactNumber.setText(phoneNumber);
                dialog.show();
            }
        });
    }
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;
    ViewHolder viewHolder = null;
    if(row == null) {
        LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        row = layoutInflater.inflate(R.layout.contact_row, parent, false);
        viewHolder = new ViewHolder(row);
        row.setTag(viewHolder);
    }else{
        viewHolder = (ViewHolder) row.getTag();
    }

    viewHolder.name.setText(names[position]);
    viewHolder.phone.setText(phones[position]);

    return row;
}

public Filter getFilter() {
    return new Filter() {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            Filter.FilterResults filterResults = new FilterResults();
            ArrayList<String> values = new ArrayList<>();
            for (int i=0; i < getCount(); i++) {
                if (names[i].contains(constraint)) {
                    values.add(names[i]);
                }
                filterResults.values = values;
                filterResults.count = values.size();
            }
            return filterResults;
        }

        @SuppressWarnings("unchecked")
        @Override
        protected void publishResults(CharSequence contraint, FilterResults results) {
            if (results.count > 0) {
                notifyDataSetChanged();
            } else {
                notifyDataSetInvalidated();
            }
        }
    };
}

}
公共类ContentAdapter扩展了ArrayAdapter{
私人语境;
私有字符串[]名称;
私人电话;
公共静态对话框;
/*ContentAdapter(上下文ctx,列表行){
超级(ctx,R.layout.contact_row,R.id.txtName,rows);
上下文=ctx;
对话框=新对话框(上下文);
}*/
ContentAdapter(上下文ctx,字符串[]名称,字符串[]电话){
超级(ctx,右布局。联系人,右id.txtName,姓名);
上下文=ctx;
名称=名称;
电话=电话;
dialog=新建对话框(上下文);
}
私有类视窗持有者{
文本视图名称、电话;
视图保持器(视图){
name=(TextView)view.findViewById(R.id.txtName);
phone=(TextView)view.findViewById(R.id.txtPhoneNumber);
view.setOnClickListener(新的view.OnClickListener(){
@凌驾
公共void onClick(视图v){
Toast.makeText(上下文,“项目单击”,Toast.LENGTH_SHORT).show();
字符串phoneNumber=phone.getText().toString();
字符串userName=name.getText().toString();
//最终对话框=新对话框(上下文);
setContentView(R.layout.custom_对话框);
对话框.setTitle(用户名);
EditText etxtContactNumber=(EditText)dialog.findViewById(R.id.etxtContactNumber);
etxtContactNumber.setText(电话号码);
dialog.show();
}
});
}
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图行=转换视图;
ViewHolder ViewHolder=null;
if(行==null){
LayoutInflater LayoutInflater=(LayoutInflater)context.getSystemService(context.LAYOUT\u INFLATER\u SERVICE);
行=布局更平坦。充气(R.layout.contact_行,父项,false);
viewHolder=新的viewHolder(行);
row.setTag(viewHolder);
}否则{
viewHolder=(viewHolder)row.getTag();
}
viewHolder.name.setText(名称[位置]);
viewHolder.phone.setText(phones[position]);
返回行;
}
公共过滤器getFilter(){
返回新筛选器(){
@凌驾
受保护的筛选器结果性能筛选(CharSequence约束){
Filter.FilterResults FilterResults=新的FilterResults();
ArrayList值=新的ArrayList();
对于(int i=0;i0){
notifyDataSetChanged();
}否则{
notifyDataSetionValidated();
}
}
};
}
}
在代码的末尾,您可以看到我用来搜索的搜索函数。我是android新手,我不知道我在那里错过了什么

EditText contactSearch = (EditText) findViewById(R.id.contactSearch);
    contactSearch.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
           contentAdapter.getFilter().filter(s);
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

当我在使用ArrayAdapter时,请尝试像使用BaseAdapter一样使用。我认为您需要将字符串数组合并到一个ArrayList中。我在ListView上有一个带有ArrayList过滤器示例的博客:希望对您有所帮助!可能重复的,您想试试吗?