私は、ユーザーがワインのデータベースを検索できるように努力しているアクションバーSearchViewを持っています。SearchViewを使用してSQLiteデータベースを検索する
「na」と入力した場合のように、「na」を含むすべての結果が表示されるように、ユーザーが入力する間に検索するようにしています。ここで
は私のメニューの検索ボタンは、if文です:
if (id == R.id.action_wine_search) {
SearchView searchView = getActivity().findViewById(R.id.action_wine_search);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String newText) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
mCursorAdapter.getFilter().filter(newText);
//mCursorAdapter is selecting id,name,price,etc. columns from the table
wineListView.setAdapter(mCursorAdapter);
return false;
}
});
}
私はそれを理解できるように(私は間違った方法でこれを考えることかもしれない)フィルターがSearchViewからテキストを取得しているということで、そのテキストをCursorAdapterに適用しています。
これは何もしていません。あなたが何を入力してもリストはまったく変わりません。
私はこのためにyoutubeビデオに続きました。私はそれがどのようにCursorAdapterに適用されていたかはかなり分かりません。
私は(これも失敗し、リストは全く変わりません)自分でそれをしようとしてしまった:
public boolean onQueryTextChange(String newText) {
SQLiteDatabase db = mDatabaseHelper.getReadableDatabase();
//Selecting what details I want to put into each row in the list
String[] projection = {
WineContract.WineEntry.COLUMN_ID,
WineContract.WineEntry.COLUMN_WINE_NAME,
WineContract.WineEntry.COLUMN_WINE_PRICE,
WineContract.WineEntry.COLUMN_WINE_RATING,
WineContract.WineEntry.COLUMN_WINE_STORE,
WineContract.WineEntry.COLUMN_WINE_IMAGE,
WineContract.WineEntry.COLUMN_WINE_THUMBNAIL};
//I want to return the row where the name is equal to newText (which is what the user types into the SearchView
String selection = WineContract.WineEntry.COLUMN_WINE_NAME + " = ?";
String[] selectionArgs = {newText};
Cursor cursor = db.query(WineContract.WineEntry.TABLE_NAME, projection, selection, selectionArgs, null, null, sortOrder);
mCursorAdapter = new WineCursorAdapter(getActivity(), cursor);
wineListView.setAdapter(mCursorAdapter);
return false;
}
});
は、私は、これは動作するようになっている方法を理解する上でいくつかの助けを得ることができますか?
、あなたはいくつかの簡単なリストラを行う必要があります。 (1) 'ListView'のために' WineCursorAdapter'を1つ作成し、 'Cursor'を変更する' changeCursor(Cursor) 'メソッドを使用します。ユーザーが新しい文字を入力するたびにまったく新しい' WineCursorAdapter'を作成しないでください。それはあまり効率的ではありません! (2)これを実行することでメインのUIスレッドをブロックするので(吃音の原因になる)、AsyncTaskまたは他のスレッドでデータベースクエリを実行する必要があります。 – Brian
あなたの本来の目標では、あなたがフォローしているこのYouTube動画をリンクできますか?私は検索結果を検索/フィルタリングするために以前は 'Cursor'フィルタを使っていませんでしたが、もっと学ぶために興味を持っています。 – Brian
これは私が言及したビデオへのリンクです:https://www.youtube.com/watch?v=4RfvmrelFzE – andrdoiddev