19121


[android
AutoCompleteTextViewにSimpleCursorAdapterを使う](http://programhhyy.hatenablog.com/entry/2014/11/18/234807)

を参考にしてsqliteのデータをアダプターに入れて実行したのですがsqlのデータの一覧が表示されるだけで実装したい機能とは違っていました。

[code]

        AutoCompleteTextView inputTextView = (AutoCompleteTextView) findViewById(R.id.autoInput);DatabaseOpenHelper helper = new DatabaseOpenHelper(this);
        SQLiteDatabase database = helper.getWritableDatabase(); 
        Cursor cursor = database.query("person", new String[]{"rowid as _id", "name"}, null, null, null, null, null);
        CursorAdapter adapter = new SimpleCursorAdapter(
                this, 
                android.R.layout.simple_spinner_item,
                cursor,
                new String[]{"name"},
                new int[]{android.R.id.text1},
                0);
        inputTextView.setAdapter(adapter);
    
[/code]

[【android アプリ 開発】 AutoCompleteTextView
作成](http://timblue.blogspot.jp/2011/01/android-autocompletetextview.html)  
のソースのように文字を入力するとString配列の中にある一致文字があるデータのみを表示させ選択できるプログラムのstring配列をsqliteの列に置き換えたいのですが方法がわかりません。  
どなたかご教授をお願いします。


CC BY-SA 3.0
2015-11-20T14:40:47.180
19097
2021-03-07T05:18:46.797
2021-03-07T05:18:46.797
3060
13247
question
java android
androidで予測変換機能を実装したい


冒頭のページにて、最下部に解決方法が書かれていますが、

[code]

    inputTextView.setAdapter(adapter);
    
[/code]

の上の行に、

[code]

    adapter.setCursorToStringConverter(new CursorToStringConverter() {
            @Override
            public String convertToString(Cursor cursor) {
                return cursor.getString(cursor.getColumnIndex("name"));
            }
        });
    
[/code]

を挿入するとうまくいく、と書かれておりますのでお試しください。


CC BY-SA 3.0
2015-11-21T03:55:43.787
19114
2015-11-21T03:55:43.787
5778
19097
answer


`FilterQueryProvider.runQuery(CharSequence
constraint)`をフィルターした`Cursor`を返すように実装し(LIKE述語を使うなどして出来るでしょう),`CursorAdapter.setFilterQueryProvider
(FilterQueryProvider filterQueryProvider)`で設定してやれば実現できます.
`constraint`で渡される文字列は入力された文字列です.

以下は動作確認をしたコード.`dHelper`はインスタンス変数であるという設定  

[code]

    adapter.setFilterQueryProvider(new FilterQueryProvider() {
        public Cursor runQuery(CharSequence constraint) {
            String str = constraint.toString();
            System.out.println(str); // constraintが変化する様子を確認
            Cursor cursor = dHelper.getReadableDatabase().query(
                    "person", new String[]{"rowid as _id", "name"},
                    "name LIKE '' || ? || '%'",new String[]{str},
                    null, null, null);
            return cursor;
        }
    });
    
[/code]


CC BY-SA 3.0
2015-11-21T07:46:32.803
19121
2015-11-21T08:56:42.767
2015-11-21T08:56:42.767
13199
13199
19097
answer