【问题标题】:Add search functionality to custom list view将搜索功能添加到自定义列表视图
【发布时间】:2017-07-19 02:41:24
【问题描述】:

我为联系人创建自定义listView,为搜索内容创建EditText。 这是搜索代码。

主要活动

    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 是在另一个类中定义的静态变量,该类位于不同的文件中,该类从AysnTask 扩展

BackgroundWorker

 public static ContentAdapter contentAdapter;
 // other code
 contentAdapter = new ContentAdapter(context, names, phones);
            listView.setAdapter(contentAdapter);

我将其设为静态变量,因为我想从上面定义的 mainActivity 类中访问它。
没有错误但搜索功能无法正常工作。我尝试搜索联系人,但无法搜索。我不知道问题是什么。没有错误,但搜索不正常。

更新 ContentAdapter 类

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

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;
}

}

【问题讨论】:

  • 在您的适配器类中创建搜索功能。
  • 为什么这段代码不工作?

标签: android listview search


【解决方案1】:

在适配器中使用此代码。

public void filter(String charText) {
        charText = charText.toLowerCase(Locale.getDefault());
        names.clear();
        if (charText.length() == 0) {
            names.addAll(arraylist);
        } else {
            for (Names wp : arraylist) {
                if (wp.toLowerCase(Locale.getDefault())
                        .contains(charText)) {
                    names.add(wp);
                }
            }
        }
        notifyDataSetChanged();
    }

【讨论】:

  • 但是我怎样才能访问 adpter 类中的 editText,因为 editText 处于 mainactivity 中
  • contentAdapter.filter(s);在 onTextChanged 中添加此代码
  • @JoyHelina 此代码在很多无法解决的方法中不起作用。我更新问题请检查它
  • @Pak Developer 请参考此链接androidbegin.com/tutorial/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-02
  • 1970-01-01
  • 2014-04-15
  • 2015-01-04
相关资源
最近更新 更多