我没有在listview上搜索项目的正确输出

时间:2019-06-05 08:12:46

标签: android android-listview searchview

onCreate中的适配器设置

  myAdapter = new MyAdapter(emp_list_activity.this,R.layout.checkable_list_layout,listview_array);
    search_view_j.setOnQueryTextListener(this);
    employee_list_View.setAdapter(myAdapter);

  search_view_j.setOnQueryTextListener(this);

@Override
public boolean onQueryTextSubmit(String query) {
    return false;
}

@Override
public boolean onQueryTextChange(String newText) {
    myAdapter.getFilter().filter(newText);
    return false;
}



 private class MyAdapter extends ArrayAdapter {

    public MyAdapter(Context context, int resource, ArrayList<String> objects) {
        super(context, resource, objects);
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        View v = getLayoutInflater().inflate(R.layout.checkable_list_layout,null);


        return v;
    }

我正在使用此自定义列表视图,并在列表视图上添加了一个searview,但是我没有得到输出,但是当我使用没有自定义的简单列表视图时,我得到了完美的输出,请检查代码并向我提供解决方案我的代码中的问题

自定义布局xml文件checkablelistlayout.xml

    <RelativeLayout  
       xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/RelativeLayout01"
         android:layout_width="match_parent"
         android:layout_height="match_parent">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textColor="#000000"
    android:textSize="18dp"
    android:layout_marginLeft="10dp"
    android:layout_centerVertical="true"
    android:layout_alignParentLeft="true"
    android:id="@+id/list_tv"/>

</RelativeLayout>

我正在搜索项目,但如果不匹配,它将仅显示一个已经位于顶部的项目,显示为空白。所以请告诉我是什么问题

1 个答案:

答案 0 :(得分:1)

  

看看这段代码

**在您的recyclerview活动中** 1)创建编辑文字 2)找出ID 3)添加addTextChangeListener

search_txt.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) {

        }

        @Override
        public void afterTextChanged(Editable s) {
            filter(s.toString());
        }
    });

4)添加方法

private void filter(String txt)
{
    ArrayList<ModelClass> temList=new ArrayList<>();

    for(ModelClass s:list)
    {
        if(s.getName().contains(txt))
        {
            temList.add(s);
        }
    }

    adapter.filterList(temList); //call this method which is written in adapter class
}

5)在getItemCount()下面的适配器类写入方法中(用于刷新)

public void filterList(ArrayList<ModelClass> fliterNm)
{
    this.data=fliterNm;
    notifyDataSetChanged();
}

希望这个答案对您有帮助。