実現したいこと
検索ボックスに文字を入力するとフィルター機能によって、その下にあるリストボックスに表示されるコンテンツが変化します。いずれかのリストをクリックするとそのリスト特有の値をもって画面を遷移させます。 onItemClick()を使用しています
よろしくお願いします
あと検索ボックスに入力したときに入力した文字がトーストみたいに下に出てくるのもなくしたいです。できればこちらもお助けいただければ
質問→検索ボックスに文字を入力するとトーストで文字表示される android studio / SearchView
よろしくお願いします
発生している問題・エラーメッセージ
フィルター機能によって表示される順番が変化するので、実際のインデックスとは異なってしまいます。
入力アリ | 入力ナシ |
---|---|
![]() | ![]() |
該当のソースコード
java
1public class SearchFragment extends Fragment implements AdapterView.OnItemClickListener { 2 3 private SearchViewModel homeViewModel; 4 private FragmentSearchBinding binding; 5 private DatabaseHelper helper=null; 6 private Cursor cursor=null; 7 private GlobalVariables gl; 8 9 public View onCreateView(@NonNull LayoutInflater inflater, 10 ViewGroup container, Bundle savedInstanceState) { 11 homeViewModel =new ViewModelProvider(this).get(SearchViewModel.class); 12 binding = FragmentSearchBinding.inflate(inflater, container, false); 13 View root = binding.getRoot(); 14 15 searchfunc(helper); 16 17 return root; 18 } 19 20 21 public void searchfunc(DatabaseHelper helper){ 22 //配列アダプターを制作、ListViewに登録 23 final ListView list = binding.list; 24 list.setAdapter(get_wordlist_fromDB(helper)); 25 //フィルター機能有効か 26 list.setTextFilterEnabled(true); 27 28 SearchView sv=binding.searchingbox ; 29 //検索ボックスdefoult入力状態にする 30 sv.requestFocus(); 31 //検索ボックス入力時の動作 32 sv.setOnQueryTextListener(new SearchView.OnQueryTextListener(){ 33 public boolean onQueryTextChange(String text){ 34 if(text==null || text.equals("")){ 35 list.clearTextFilter(); 36 }else{ 37 list.setFilterText(text); 38 } 39 return false; 40 } 41 42 @Override 43 public boolean onQueryTextSubmit(String s) { 44 return false; 45 } 46 }); 47 48 list.setOnItemClickListener(this); 49 } 50 51 52 53 public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 54 Intent intent = new Intent(this.getContext(), ResultsActivity.class); 55//positionがフィルターによって変わるので本来のインデックスと異なる 56 this.cursor.moveToPosition(position); 57 //golobalvariablesにwordをセット 58 gl=(GlobalVariables) getContext().getApplicationContext(); 59 gl.setWord(cursor.getString(0)); 60 // Activity をスイッチする 61 startActivity(intent); 62 Log.e("debug","word: "+gl.getWord()); 63 } 64 65 66 67 //データをリストに入れるための準備 68 //cursorに全部のデータを入れてます 69 public ArrayAdapter<String> get_wordlist_fromDB(DatabaseHelper helper){ 70 //helperを準備 71 helper=new DatabaseHelper(getContext());//元々this 72 try { 73 helper.createDatabase(); 74 } 75 catch (IOException e) { 76 throw new Error("Unable to create database"); 77 } 78 //データベース取得 79 SQLiteDatabase db=helper.getWritableDatabase(); 80 try{ 81 int i =0; 82 String sql="QUERY"; 83 this.cursor=db.rawQuery(sql , null); 84 cursor.moveToFirst(); 85 ArrayList<String> data =new ArrayList<>(); 86 data.add(cursor.getString(i)); 87 while (cursor.moveToNext()) { 88 data.add(cursor.getString(i)); 89 } 90 ArrayAdapter<String> adapter=new ArrayAdapter<>(getContext(), android.R.layout.simple_list_item_1, data); 91 return adapter; 92 }finally{ 93 db.close(); 94 } 95 } 96 97 98 @Override 99 public void onDestroyView() { 100 super.onDestroyView(); 101 binding = null; 102 } 103 104 105}

回答1件
あなたの回答
tips
プレビュー