2012-05-22 47 views
0

我有自定義對象過濾數組適配器的問題。我無法自定義對象toString(),所以它返回名稱,我想篩選。問題是它filer正確計數的項目,但錯誤的項目。例如。我列出了項目a1,a2,b1,b2。當我輸入b過濾器時,我看到a1,a2。這是我的適配器代碼。我想問題是有:ArrayAdapter過濾器返回錯誤的項目

class CustomerAdapter extends ArrayAdapter<Customer> { 

private LayoutInflater mInflater; 
private List<Customer> customers; 

public CustomerAdapter(Context context, int textViewResourceId, 
     List<Customer> customers) { 
    super(context, textViewResourceId, customers); 
    mInflater = LayoutInflater.from(context); 
    this.customers = customers; 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    ViewHolder holder; 

    if (convertView == null) { 
     convertView = mInflater.inflate(R.layout.customers_list_item, null); 

     holder = new ViewHolder(); 
     holder.text = (TextView) convertView 
       .findViewById(R.id.textViewCustomerName); 
     holder.icon = (LinearLayout) convertView 
       .findViewById(R.id.linearLayoutCustomersListEdit); 

     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    // Bind the data efficiently with the holder. 
    holder.text.setText(customers.get(position).getCustomerName()); 

    return convertView; 
} 

static class ViewHolder { 
    TextView text; 
    LinearLayout icon; 
} 

}

這裏是過濾器的設置和調用:

customerAdapter = new CustomerAdapter(this, 
       R.layout.customers_list_item, repository.getCustomers()); 
setListAdapter(customerAdapter); 

etSearch = (EditText) findViewById(R.id.editText_customers_search); 
     etSearch.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void onTextChanged(CharSequence s, int arg1, int arg2, 
       int arg3) { 
      customerAdapter.getFilter().filter(s.toString()); 
     } 

     @Override 
     public void beforeTextChanged(CharSequence arg0, int arg1, 
       int arg2, int arg3) { 
     } 

     @Override 
     public void afterTextChanged(Editable arg0) { 
     } 
    }); 

    getListView().setTextFilterEnabled(true); 
+0

我認爲你應該重寫用getFilter方法能夠更換過濾器行爲並做出自己的過濾 –

回答

1
List<Customer> customers = new List<Customer>(); 
List<Customer> tempcustomers = new List<Customer>(); 
customers = repository.getCustomers(); 
etSearch .addTextChangedListener(new TextWatcher() { 
      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 
       // TODO Auto-generated method stub 
       System.out.println("onTextChanged Key presed..."+s); 


      } 

      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, 
        int after) { 
       // TODO Auto-generated method stub 
       System.out.println("beforeTextChanged Key presed..."+filterText.getText()); 

      } 

      @Override 
      public void afterTextChanged(Editable s) { 
       // TODO Auto-generated method stub 
       System.out.println("afterTextChanged Key presed..."+filterText.getText()); 
       if (!etSearch .getText().toString().equalsIgnoreCase("")){ 
        tempcustomers = new List<Customer>(); 
        String text = etSearch .getText().toString(); 

        for(int i=0 ;i< customers .size();i++){ 

         if(customers .get(i).toUpperCase().toString().contains(text.toUpperCase())){ 
          tempcustomers .add(customers .get(i)); 

         } 
        } 

         } 
        customerAdapter = new CustomerAdapter(this, 
       R.layout.customers_list_item,tempcustomers ); 
setListAdapter(customerAdapter); 

       }else{ 
        customerAdapter = new CustomerAdapter(this, 
       R.layout.customers_list_item,customers ); 
setListAdapter(customerAdapter); 

       } 
      } 
     }); 
    } 
+0

工作良好。謝謝 – vandzi

+0

@vandzi歡迎,您的網站不錯... –

相關問題