【问题标题】:I am not getting correct output of searching an item on listview我没有得到在 listview 上搜索项目的正确输出
【发布时间】:2026-02-08 20:50:01
【问题描述】:

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>

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

【问题讨论】:

  • 请发布您的 MyAdapter 类的完整代码
  • edit您的问题并描述预期和实际输出(一些简单的例子,不一定是真实数据)
  • 在输出接收第一次添加文本但不匹配时显示空白..

标签: android android-listview searchview


【解决方案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();
}

希望这个回答对你有帮助..

【讨论】:

  • 但是我使用的是listview,我可以在listview中使用这些方法而不是recyclerview吗?
  • 我不确定 Listview,我认为您应该尝试使用 ListView 并给我们反馈。我只尝试使用 Recycler 视图。 @Puneet Kansal