Java SearchView使用CustomAdapter仅显示listView中的一条记录(&A),但SearchView使用ArrayAdapter效果良好。这是我的适配器

Java SearchView使用CustomAdapter仅显示listView中的一条记录(&A),但SearchView使用ArrayAdapter效果良好。这是我的适配器,java,android,listview,searchview,custom-adapter,Java,Android,Listview,Searchview,Custom Adapter,您必须在自定义适配器中实现filter类,并从类中调用此方法 在适配器中: import com.example.mis_internee.atendence_app_android.R; public class EMP_LEAVE_ADAPTER extends ArrayAdapter<String> { private final Activity context; private final String[] itemname;

您必须在自定义适配器中实现filter类,并从类中调用此方法

在适配器中:

import com.example.mis_internee.atendence_app_android.R;


    public class EMP_LEAVE_ADAPTER extends ArrayAdapter<String> {

        private final Activity context;
        private final String[] itemname;

        public EMP_LEAVE_ADAPTER(Activity context, String[] itemname) {
            super(context, R.layout.mylist, itemname);
            // TODO Auto-generated constructor stub

            this.context = context;
            this.itemname = itemname;


        }
        public View getView(int position, View view, ViewGroup parent) {
            LayoutInflater inflater=context.getLayoutInflater();
            View rowView=inflater.inflate(R.layout.emp_leave_adpater_layout, null,true);

            TextView txtTitle = (TextView) rowView.findViewById(R.id.item);
            ImageView image=(ImageView)rowView.findViewById(R.id.icon);

            txtTitle.setText(itemname[position]);
            return rowView;

        };
    }

根据您的要求进行更改,希望对您有所帮助

您需要返回不同的视图,还需要手动循环视图,如下所示:

editTxt.addTextChangedListener(new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        System.out.println("Text ["+s+"]");

        mSearchableAdapter.getFilter().filter(s.toString());                           
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {

    }

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

代码中的search filter方法在哪里?SearchView处于活动状态,当我编写arratAdapter.getFilter.filternewText时,它正在工作;但是当我使用这个适配器ELA.getFilter.filternewText;它只显示列表的第一行,这就是为什么我要求您为搜索创建自定义适配器,所以您必须为筛选文本实现筛选方法。public boolean onCreateOptions菜单菜单{MenuInflater充气机=getMenuInflater;inflater.inflater.menu.viewaprovedlist,menu;SearchManager SearchManager=SearchManager getSystemServiceContext.SEARCH\u服务;MenuItem searchMenuItem=menu.findItemR.id.action\u SEARCH;searchView=searchView searchMenuItem.getActionView;searchView.SetSearchBearcableInfoSearchmanager.getSearchableInfogetComponentName;searchView.setSubmitButtonEnabledtrue;searchView.setOnQueryTextListenerthis;返回true;}公共布尔onQueryTextSubmitString查询{返回false;}@Override公共布尔onQueryTextChangeString新文本{ELA.getFilter.filternewText;///如果TextUtils.isEmptynewText{///listView.clearTextFilter;//}//否则{///listView.setFilterTextnewText.toString;//}返回true;}您好,感谢您的回复,我使用了文本和图像适配器,它显示得很好,但当我添加searchView和search with name时,它只显示顶部的名称,如果从列表中搜索文本,则不显示行您希望在列表中搜索文本时隐藏行,对吗?不,我只想显示我搜索时喜欢的行,如果是搜索A从列表A B C D中,它将显示A,但当我搜索B时,它将再次显示A,但当我搜索不在列表中的XYZ时,它将不显示任何内容。确定。从API获得响应后,更新arraylist数据/并使用adapter.notifydatasetchanged刷新适配器。如果没有结果,请添加null检查以防止刷新。。
editTxt.addTextChangedListener(new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        System.out.println("Text ["+s+"]");

        mSearchableAdapter.getFilter().filter(s.toString());                           
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {

    }

    @Override
    public void afterTextChanged(Editable s) {
    }
});
 public View getView(int position, View view, ViewGroup parent) {
 ViewHolder viewHolder;
 if(view == null) {
   viewHolder = new ViewHolder();
   LayoutInflater inflater=context.getLayoutInflater();
   View rowView=inflater.inflate(R.layout.emp_leave_adpater_layout, null,true);

  viewHolder.txtTitle = (TextView) rowView.findViewById(R.id.item);
  viewHolder.image=(ImageView)rowView.findViewById(R.id.icon);
  view.setTag(viewHolder);
    } else {
      viewHolder = (ViewHolder) view.getTag();
    }   
  viewHolder.txtTitle.setText(itemname[position]);

  return viewHolder;
};


public class viewholder {

 public TextView txtTitle;
 public ImageView image;
}