1

名前のリストと AutoCompleteTextView があります。ユーザーが入力した文字列で名前をフィルター処理するには AutoCompleteTextView が必要ですが、AutoCompleteTextView が機能しないため、何が間違っているのかわかりません。手伝って頂けますか?

これが私のコードです:

cursor = socioData.getAllSocios();
adapter = new SimpleCursorAdapter(
        this,
        android.R.layout.simple_dropdown_item_1line,
        cursor,
        new String[]{Socio.C_NOME},
        new int[]{android.R.id.text1}
        );

filterText = (AutoCompleteTextView)findViewById(R.id.search);
filterText.setThreshold(1);
filterText.setAdapter(adapter);
adapter.setCursorToStringConverter(new CursorToStringConverter() {
    @Override
    public String convertToString(Cursor cursor) {
        //return cursor.getString(1);
        final int colIndex = cursor.getColumnIndexOrThrow(Socio.C_NOME);
        return cursor.getString(colIndex);
    }
});

adapter.setFilterQueryProvider(new FilterQueryProvider() {
    @Override
    public Cursor runQuery(CharSequence constraint){
        return getContentResolver().query(Data.CONTENT_URI,
                Socio.ALL_COLUMNS,
                Socio.C_NOME + " like '%"+constraint+"%'",
                null,
                Socio.C_NOME +" ASC");
    }
});  

filterListener = new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence s, int arg1, int arg2, int arg3) {
        if ("".equals(s))
            adapter.getFilter().filter(null);
        else
            adapter.getFilter().filter(s.toString());   
    }

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

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

1 に答える 1

0

あなたはやりすぎているようです...ここにいくつかの単純化があります:

  • TextWatcher を使用している場所はわかりませんが、必須ではありません。実際、AutoCompleteTextView が機能しなくなる可能性があります。したがって、これを削除する必要があります。

  • _idFilterQueryProviderとgetAllSocios() では、列のみを要求する必要がありSocio.C_NOMEます。使用する列は 2 つしかないためです。

  • setStringConversionColumn()CursorToStringConverter の代わりに使用するだけです。

一緒に必要なものは次のとおりです。

cursor = socioData.getAllSocios();
adapter = new SimpleCursorAdapter(
        this,
        android.R.layout.simple_dropdown_item_1line,
        cursor,
        new String[]{Socio.C_NOME},
        new int[]{android.R.id.text1} );

adapter.setFilterQueryProvider(new FilterQueryProvider() {
    @Override
    public Cursor runQuery(CharSequence constraint){
        // Stop the FQP from looking for nothing
        if(constraint == null)
            return null;

        return getContentResolver().query(Data.CONTENT_URI,
            new String[] {"_id", Socio.C_NOME},
            Socio.C_NOME + " like ?", 
            "'%"+constraint+"%'",
            Socio.C_NOME);
    }
});
adapter.setStringConversionColumn(cursor.getColumnIndex(Socio.C_NOME));

filterText = (AutoCompleteTextView)findViewById(R.id.search);
filterText.setThreshold(1);
filterText.setAdapter(adapter);

それが役立つことを願っています!

于 2012-08-23T17:32:47.060 に答える