mardi 21 avril 2015

Filter ListView SimpleCursorAdapter setFilterQueryProvider

I want to filter the Atomic_Number and the Name of an item in ListView with multiple "Like?" without success. what is my mistake?

private ListView lvElementos;
private EditText etBuscar;
private SimpleCursorAdapter adaptador;
private Cursor cur_Elements;

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    lvElementos = (ListView) findViewById(R.id.LV_Elementos);

    lvElementos.setFastScrollEnabled(true);
    lvElementos.setTextFilterEnabled(true);

    //ListView SQlite- Open Database
    DatabaseHelper admin_Elements = new DatabaseHelper(this);
    final SQLiteDatabase bd_Elements = admin_Elements.getWritableDatabase();
    cur_Elements = bd_Elements.rawQuery("select _id, (Atomic_Number||'. '||Name)as Name from DataTP", null);

    if (cur_Elements.moveToFirst()) {
        String[] from = new String[]{"Name"};
        int[] to = new int[]{android.R.id.text1};
        adaptador = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, cur_Elements, from, to, 0);
        lvElementos.setAdapter(adaptador);
    }
 else {
            Toast.makeText(this, "Error retrieving element's name database", Toast.LENGTH_SHORT).show();
        }
        //cur_Elements.close();

    lvElementos.setOnItemClickListener(this);

    etBuscar = (EditText) findViewById(R.id.et_buscar);

    etBuscar.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
            // TODO Auto-generated method stub

            MainActivity.this.adaptador.getFilter().filter(cs.toString());
        }

        @Override
        public void beforeTextChanged(CharSequence cs, int arg1, int arg2,
                                      int arg3) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable cs) {
            // TODO Auto-generated method stub

        }
    });

    //Check This
    adaptador.setFilterQueryProvider(new FilterQueryProvider() {
        @Override
        public Cursor runQuery(CharSequence constraint) {


            final String[] Columns={"_id","(Atomic_Number||'. '||Name)as Name"};
            return bd_Elements.query("DataTP",Columns,"Name like ?",new String[] { constraint + "%" },null,null,null,null);//Atomic_Number not filter

//return bd_Elements.query("DataTP",Columns,"Atomic_Number like ? OR Name like ?",new String[] { constraint + "%" },null,null,null,null);//Name not filter
        }
    });

}

I have done many variants in the setFilterQueryProvider but none has served. In the EditText me to try to filter only appears one of the two columns and the other disappears.

Aucun commentaire:

Enregistrer un commentaire