2016-04-20 8 views
1

私はカスタムリストビューを使用しています。特定の値を検索したいと思います。現在、私のコード検索では、入力されたテキストと一致するものはすべて検索されます.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; 
    } 
} 

ご意見やご協力をいただきありがとうございます。ありがとうございます。 http://coderzpassion.com/android-working-google-places-api/しかしuは要求に応じて、それを試してみて、修正することができます - :

@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; 
} 

この例では、対象商品:

+0

refreshFragment()は何をしますか? –

+0

@ user3295583 refreshFragment()refreshはリストビューです。 –

答えて

0

は、カスタムのようにフィルタを実装これを試してみてください。ありがとう。欲しいのですが。

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) { 

     } 
    }); 
関連する問題