[AndroidStudio]Room再_まとめメモ③
Fragment使ってる画面でRoomが動いたので、今後のためにまとめメモしているの③です ■ ■ ■ListView用のAdapter作成して、Fragment画面に、DBアクセス関係の処理を書いていきます ■ ■ ■■Adapterファイル作成「BuyListAdapter.java」※idを行末に表示しておきますpublic class BuyListAdapter extends ArrayAdapter<BuyListData> { LayoutInflater mLayoutInflater; // コンストラクタ public BuyListAdapter(Context context, int resourceId, List<BuyListData> objects) { //親のコンストラクタを呼び出す super(context, resourceId, objects); //インフレーターを取得する // getLayoutInflater()メソッドはActivityじゃないと使えない this.mLayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } // getView()メソッドは各行を表示しようとした時に呼ばれる @Override public View getView(int position, View convertView, ViewGroup parent) { // 指定行(position)のアイテムを取得する BuyListData data = getItem(position); // convertViewは使いまわされている可能性があるのでnullの時だけ新しく作る if (null == convertView) { convertView = mLayoutInflater.inflate(R.layout.list_item, null); } // BuyListDataのデータをViewの各Widgetにセットする TextView textView = convertView.findViewById(R.id.txtId); String str = String.valueOf(data.intId); textView.setText(str); CheckBox checkBox = convertView.findViewById(R.id.check_box); checkBox.setText(data.Text); checkBox.setOnCheckedChangeListener(null); checkBox.setChecked(data.isChecked); checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) { BuyListData MyData = getItem(position); MyData.isChecked = isChecked; } }); // 表示するビューを返す return convertView; }}■Fragmentファイル追記「ui\list」配下の「ListFragment.java」※共通変数宣言rivate int list_size = 0;private BuyListAdapter mAdapter;private ListViewModel mListViewModel;※「onCreateView」内にListView表示処理追記※ViewModelの変数名変えたのでmListViewModel = new ViewModelProvider(this).get(ListViewModel.class);// リストビューを取得するListView listView = binding.getRoot().findViewById(R.id.list_view);mListViewModel.getAllBuylists().observe(getViewLifecycleOwner(), Blist -> { list_size = Blist.size(); // リストビューに表示する項目を生成する List<BuyListData> list = new ArrayList<>(); for (int i = 0; i < list_size; i++) { Buylist entity = Blist.get(i); int ids = entity.getId(); String names= entity.getBuyName(); boolean checks = entity.getCheckFlg(); BuyListData myData = new BuyListData(ids, names, checks); list.add(myData); } // リストビューにカスタムしたリストアダプタを設定する mAdapter = new BuyListAdapter( getActivity(), R.layout.list_item, list); listView.setAdapter(mAdapter);});※「onCreateView」内にListViewクリック時処理追記 チェックボックスのチェック有無の更新をUpdateで即反映するlistView.setOnItemClickListener(new AdapterView.OnItemClickListener() { //リスト項目クリック時の処理 @Override public void onItemClick(AdapterView<?> parent, View view, int position,long id) { TextView textview = listView.getChildAt(position).findViewById(R.id.txtId); String str = textview.getText().toString(); int intId = Integer.parseInt(str); CheckBox checkBox = listView.getChildAt(position).findViewById(R.id.check_box); boolean buy_check_flg = true; if (checkBox.isChecked()) { buy_check_flg = false; //逆にする } mListViewModel.update(intId, buy_check_flg); //更新処理 }});※「onCreateView」内にボタンクリック時処理追記//追加ボタン押下処理binding.btnAdd.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String buy_name = binding.NewWordEdit.getText().toString(); boolean buy_check_flg = false; Buylist entity = new Buylist(buy_name, buy_check_flg); mListViewModel.insert(entity); //新規追加 binding.NewWordEdit.setText(""); //入力エリア初期化 }});//買い物おわりボタン押下処理binding.btnDelete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //mListViewModel.delete(del_id);//id指定で削除 mListViewModel.deleteChk(); //チェック済みを削除 }});以上な感じで、一応、画面は意図したように動きました