[AndroidStudio]Room再_まとめメモ③ | 徒然雑記録

徒然雑記録

中3息子と小6娘を持つママです
週二回パートに出てるけど基本家に引きこもってますw
日常生活であった事をメモのごとく書いています

こどもの影響で見始めた鬼滅の刃にハマり落ちました…

MMDとXISMOを始めました☆

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();     //チェック済みを削除

    }
});

 

以上な感じで、一応、画面は意図したように動きましたにっこり