Android Listview搜索工作不正常
请在我的代码中帮助我,它不会搜索完美,除了可搜索的字符串之外,所有其他值都保留在它们的位置上 这是filterable类的代码Android Listview搜索工作不正常,android,search,android-listview,android-filter,android-filterable,Android,Search,Android Listview,Android Filter,Android Filterable,请在我的代码中帮助我,它不会搜索完美,除了可搜索的字符串之外,所有其他值都保留在它们的位置上 这是filterable类的代码 import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.StringTokenizer; import android.app.Activity; import android.content.
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.StringTokenizer;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Interpolator.Result;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.TextView;
public class ListViewAdapter_claimlist extends BaseAdapter implements Filterable{
Activity context;
String claimid[];
String ref[];
String policy[];
String natureofloss[];
String registration[];
String status[];
private ItemFilter mFilter = new ItemFilter();
private List<String>originalData = null;
private List<String>filteredData = null;
private List<String>claimidFilter = null;
private List<String>refFilter = null;
private List<String>nautreoflossfilter = null;
private List<String>registrationFilter = null;
private List<String>statusFilter = null;
ArrayList<abc> alldata = new ArrayList<abc>();
public ListViewAdapter_claimlist(Activity context, String[] claimid, String[] ref,String[] policy, String[] natureofloss,String[] registration, String[] status) {
super();
this.context = context;
this.claimid = claimid;
this.ref = ref;
this.policy = policy;
this.natureofloss = natureofloss;
this.registration = registration;
this.status = status;
this.filteredData = new ArrayList<String>(Arrays.asList(this.policy));
this.originalData = new ArrayList<String>(Arrays.asList(this.policy));
this.claimidFilter = new ArrayList<String>(Arrays.asList(this.claimid));
this.refFilter = new ArrayList<String>(Arrays.asList(this.ref));
this.nautreoflossfilter = new ArrayList<String>(Arrays.asList(this.natureofloss));
this.registrationFilter = new ArrayList<String>(Arrays.asList(this.registration));
this.statusFilter = new ArrayList<String>(Arrays.asList(this.status));
for(int i = 0; i<this.claimid.length; i++)
{
abc a = new abc();
a.setClaimid(claimid[i]);
a.setRef(ref[i]);
a.setPolicy(policy[i]);
a.setNatureofLoss(natureofloss[i]);
a.setRegistration(registration[i]);
a.setStatus(status[i]);
alldata.add(a);
}
}
public int getCount() {
return filteredData.size();
}
public Object getItem(int position) {
return filteredData.get(position);
}
public long getItemId(int position) {
return 0;
}
private class ViewHolder {
TextView cliamid;
TextView ref;
TextView policy;
TextView natureofloss;
TextView registration;
TextView status;
}
public View getView(int position, View convertView, final ViewGroup parent)
{
final ViewHolder holder;
LayoutInflater inflater = context.getLayoutInflater();
if (convertView == null)
{
convertView = inflater.inflate(R.layout.rowitem_cliamlist, null);
holder = new ViewHolder();
holder.cliamid = (TextView) convertView.findViewById(R.id.tv_claims);
holder.ref = (TextView) convertView.findViewById(R.id.tv_referencepolicy);
holder.policy = (TextView) convertView.findViewById(R.id.tv_policyNo);
holder.natureofloss = (TextView) convertView.findViewById(R.id.tv_natureoflos);
holder.registration = (TextView) convertView.findViewById(R.id.tv_registration);
holder.status = (TextView) convertView.findViewById(R.id.tv_claimstatus);
convertView.setTag(holder);
}
else
{
holder = (ViewHolder) convertView.getTag();
}
abc aa = alldata.get(position);
holder.cliamid.setText(aa.getClaimid());
holder.ref.setText(aa.getRef());
holder.policy.setText(filteredData.get(position));
holder.natureofloss.setText(aa.getNatureofloss());
holder.registration.setText(aa.getRegistration());
holder.status.setText(aa.getStatus());
return convertView;
}
//--------------------------------------------------------------------------------
public Filter getFilter() {
return mFilter;
}
private class ItemFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
String filterString = constraint.toString().toLowerCase();
FilterResults results = new FilterResults();
final List<String> list = originalData;
int count = list.size();
final ArrayList<String> nlist = new ArrayList<String>(count);
String filterableString ;
for (int i = 0; i < count; i++) {
filterableString = list.get(i);
if (filterableString.toLowerCase().contains(filterString)) {
nlist.add(filterableString);
}
}
results.values = nlist;
results.count = nlist.size();
return results;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
filteredData = (ArrayList<String>) results.values;
notifyDataSetChanged();
}
}
public class abc
{
String claimid;
String ref;
String policy;
String natureofloss;
String registration;
String status;
public void setClaimid(String claimid)
{
this.claimid = claimid;
}
public void setRef(String ref)
{
this.ref = ref;
}
public void setPolicy(String policy)
{
this.policy = policy;
}
public void setNatureofLoss(String natureofloss)
{
this.natureofloss = natureofloss;
}
public void setRegistration(String registration)
{
this.registration = registration;
}
public void setStatus(String status)
{
this.status = status;
}
public String getClaimid()
{
String claimid = this.claimid;
return claimid;
}
public String getRef()
{
String ref = this.ref;
return ref;
}
public String getPolicy()
{
String Policy = this.policy;
return Policy;
}
public String getNatureofloss()
{
String Natureofloss = this.natureofloss;
return Natureofloss;
}
public String getRegistration()
{
String Registration = this.registration;
return Registration;
}
public String getStatus()
{
String Status = this.status;
return Status;
}
}
}
搜查前
当警察搜查时,无(政策代码)
提前感谢:)您可以为此选择另一个技巧,在输入搜索文本的编辑文本上设置一个textWatcher
searchText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
String text = searchText.getText().toString()
.toLowerCase(Locale.getDefault());
lviewAdapter.filter(text);
}
});
在适配器类中放置筛选器方法
public void filter(String charText) {
charText = charText.toLowerCase(Locale.getDefault());
temp.clear();
if (charText.length() == 0) {
temp.addAll(list_original);
} else {
for (Abc abc: list_original) {
// if you want to search via policy
if (abc.getPolicy().toLowerCase(Locale.getDefault())
.contains(charText)) {
temp.add(abc);
}
}
}
notifyDataSetChanged();
}
创建两个Abc类型的ArrayList,一个是temp,另一个是original,始终将数据从temp列表传递到getview方法中的listview,这样您就可以在temp中进行更改,而不是在原始列表中进行更改。在上面的例子中,临时列表首先被清除,然后运行循环检查原始列表中的搜索文本是否匹配,然后将该对象添加到临时列表中,并调用notifyDataSetChanged。。瞧,你的数据是从哪里来的?sqlite db?检查:我正在从“WebService”获取数据,并通过一堆数组从主类发送数据将数据存储到sqlite db,它会将您的代码简化为现有代码的1/3很多东西我无法更改为sqlite brother。。。。嗯,Haresh chhelana,我不能在我的代码中完美地实现这一点。请帮我换一种方式兄弟,我是android新手,我无法做出你所说的改变。。。您能在skyp或team viewer上查看我的代码吗?请将您的代码通过电子邮件发送给我@luckysingh781@gmail.com,我会尽力让它工作的
public void filter(String charText) {
charText = charText.toLowerCase(Locale.getDefault());
temp.clear();
if (charText.length() == 0) {
temp.addAll(list_original);
} else {
for (Abc abc: list_original) {
// if you want to search via policy
if (abc.getPolicy().toLowerCase(Locale.getDefault())
.contains(charText)) {
temp.add(abc);
}
}
}
notifyDataSetChanged();
}