2016-04-20 5 views
1

Ich benutze eine benutzerdefinierte Listenansicht und möchte nach einem bestimmten Wert suchen. Jetzt glaube ich, dass meine Codesuche nach allem und jedem, was dem eingegebenen Text entspricht, erfolgt. Ich möchte nur nach doc_no suchen. Folgendes ist mein Code.Suchergebnis nur für einen bestimmten Wert in einer benutzerdefinierten Listenansicht in Android?

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(); 
       } 

      } 
     }); 

}

Dies ist mein Adapter Code.

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

Jeder Vorschlag oder Hilfe wird geschätzt.Vielen Dank.

+0

was macht refreshFragment()? –

+0

@ user3295583 refreshFragment() refresh ist die Listenansicht. –

Antwort

0

Versuchen Sie, diese Gewohnheit wie diese Filter Implement:

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

Dieses Beispiel ist aus: - http://coderzpassion.com/android-working-google-places-api/ aber u kann es versuchen und ändern Anforderung nach. Vielen Dank. Hoffe es hilft

0

Versuchen Sie unten Code.

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

     } 
    });