Java SearchView使用CustomAdapter仅显示listView中的一条记录(&A),但SearchView使用ArrayAdapter效果良好。这是我的适配器
您必须在自定义适配器中实现filter类,并从类中调用此方法 在适配器中: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;
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;
}