我正在使用自定义列表视图,我想搜索特定的值。现在我认为我的代码搜索了所有与所输入文本匹配的内容。我想只搜索doc_no。 以下是我的代码。
public void showJson(String json) {
final Context billsctx = getActivity();
ParseBills pb = new ParseBills(json);
pb.parseJSON();
bl = new BillsCustomList((Activity) billsctx, ParseBills.doc_no, ParseBills.date, ParseBills.cust_name, ParseBills.cust_number, ParseBills.item_count, ParseBills.total_wt,
ParseBills.total,ParseBills.balance, ParseBills.bill_type);
all_listView.setAdapter(bl);
inputSearch.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
bl.getFilter().filter(s);
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (s.length()==0)
{
refreshFragment();
}
}
});
}
这是我的适配器代码。
public class BillsCustomList extends ArrayAdapter<String>
{
private String[] doc_no;
private String[]date;
private String[] cust_name;
private String[] cust_number;
private String[] item_count;
private String[]total_wt;
private String[]total;
private String[]balance;
private String[]bill_type;
private Activity context;
public BillsCustomList(Activity context, String[] doc_no, String[] date, String[] cust_name,String[] cust_number,String[] item_count,String[] total_wt,String[] total,String[] balance,String[] bill_type)
{
super(context, R.layout.bills_list_view, doc_no);
this.context =context;
this.doc_no=doc_no;
this.date = date;
this.cust_name = cust_name;
this.cust_number = cust_number;
this.item_count= item_count;
this.total_wt = total_wt;
this.total = total;
this.balance = balance;
this.bill_type = bill_type;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
LayoutInflater inflater = context.getLayoutInflater();
View listViewItem = inflater.inflate(R.layout.bills_list_view, null, true);
TextView textViewDocno = (TextView) listViewItem.findViewById(R.id.textViewInvNo);
TextView textViewDt = (TextView) listViewItem.findViewById(R.id.textViewDt);
TextView textViewName = (TextView) listViewItem.findViewById(R.id.textViewName);
TextView textViewNumber = (TextView) listViewItem.findViewById(R.id.textViewNumber);
TextView textViewCount = (TextView) listViewItem.findViewById(R.id.textViewCount);
TextView textViewTotwt = (TextView) listViewItem.findViewById(R.id.textViewTotwt);
TextView textViewTot = (TextView) listViewItem.findViewById(R.id.textViewTot);
TextView textViewBal = (TextView) listViewItem.findViewById(R.id.textViewBalanace);
TextView textViewBt = (TextView) listViewItem.findViewById(R.id.textViewBt);
textViewDocno.setText(doc_no[position]);
textViewDt.setText(date[position]);
textViewName.setText(cust_name[position]);
textViewNumber.setText(cust_number[position]);
textViewCount.setText(item_count[position]);
textViewTotwt.setText(total_wt[position]);
textViewTot.setText(total[position]);
textViewBal.setText(balance[position]);
textViewBt.setText(bill_type[position]);
return listViewItem;
}
}
感谢任何建议或帮助。谢谢。
答案 0 :(得分:0)
试试这个实现自定义过滤器,如下所示:
@Override
public Filter getFilter() {
Filter filter=new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results=new FilterResults();
if(constraint!=null)
{
places=getPredictions(constraint.toString());
if(places!=null)
{
results.values=places;
results.count=places.size();
}
}
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (results != null && results.count > 0) {
// The API returned at least one result, update the data.
notifyDataSetChanged();
} else {
// The API did not return any results, invalidate the data set.
notifyDataSetInvalidated();
}
}
};
return filter;
}
此示例来自: - http://coderzpassion.com/android-working-google-places-api/,但您可以根据要求尝试修改它。谢谢。希望它有所帮助
答案 1 :(得分:0)
尝试以下代码。
ArrayList<String> type_name_copy = new ArrayList<String>();
inputSearch.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
ArrayList<String> type_name_filter = new ArrayList<String>();
String text = theWatchedText.toString();
for (int i = 0; i < array.size(); i++) {
if ((ParseBills.doc_no[i].toLowerCase()).contains(text
.toLowerCase())) {
type_name_filter.add(ParseBills.doc_no[i]);
}
}
type_name_copy = type_name_filter;//use this to update list
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable theWatchedText) {
}
});