0

カスタムオブジェクトを使用したアレイアダプタのフィルタリングに問題があります。カスタムオブジェクトtoString()をowerrideするので、フィルターが必要なname-を返します。問題は、アイテムの数は正しいが間違ったアイテムをファイリングすることです。たとえば、アイテムa1、a2、b1、b2のリストがあります。bと入力すると、フィルターが表示され、a1、a2が表示されます。これが私のアダプタコードです。私は問題があると思います:

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);
4

1 に答える 1

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

                }
            }
        });
    }
于 2012-05-22T15:47:45.177 に答える