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

徒然雑記録

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

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

MMDとXISMOを始めました☆

Fragment使ってる画面でRoomが動いたので、今後のためにまとめメモしているの②ですにっこり

 

 ■ ■ ■

 

リポジトリは「model」フォルダを作って、そこに入れました

ViewModelは、BottomNavigationで自動作成されたViewModelを使うことにしました

ListView用のAdaptreは、どこの階層に作るべきかわからなかったので、とりあえず、MainActivityと同じ階層に置いてみました。

ファイル構成は悩みます。

まあ、個人プロジェクトなんで、わかりづらいのもぶっちゃけアリですがw

 

 ■ ■ ■

 

■Repositoryファイル作成

「model」フォルダ配下「BuylistRepository.java」

※id指定でDeleteしようとした名残が残ってます

 
public class BuylistRepository {
    private BuylistDao mBuylistDao;
    private LiveData<List<Buylist>> mAllBuylists;

    //コンストラクタ
    public BuylistRepository(Application application) {
        AppDatabase db = AppDatabase.getDatabase(application);
        mBuylistDao = db.buyListDao();
        mAllBuylists = mBuylistDao.getAlphabetizedBuylists();
    }

    public LiveData<List<Buylist>> getAllBuylists() {
        return mAllBuylists;
    }

    public void insert(Buylist buylist) {
        AppDatabase.databaseWriteExecutor.execute(() -> {
            mBuylistDao.insert(buylist);
        });
    }

    public void delete(int id) {
        AppDatabase.databaseWriteExecutor.execute(() -> {
            mBuylistDao.delete(id);
        });
    }


    public void deleteChk() {
        AppDatabase.databaseWriteExecutor.execute(() -> {
            mBuylistDao.deleteChk();
        });
    }

    public void update(int id, boolean isChecked) {
        AppDatabase.databaseWriteExecutor.execute(() -> {
            mBuylistDao.update(id, isChecked);
        });
    }
}

■ViewModelファイル修正

「ui\list」配下の「ListViewModel.java」

※赤字の部分は、自動作成されてたもともとのコードです

※extendsが「ViewModel」から「AndroidViewModel」に変わりました

 
public class ListViewModel extends AndroidViewModel {
    private BuylistRepository mRepository;
    private final LiveData<List<Buylist>> mAllBuylists;
    private final MutableLiveData<String> mText;

    public ListViewModel(Application application) {
        super(application);
        mRepository = new BuylistRepository(application);
        mAllBuylists = mRepository.getAllBuylists();
        mText = new MutableLiveData<>();
        mText.setValue("This is list fragment");

    }

    LiveData<List<Buylist>> getAllBuylists() {
        return mAllBuylists;
    }

    //リポジトリに追加の処理を依頼する
    void insert(Buylist buylist) {
        mRepository.insert(buylist);
    }

    //リポジトリに削除の処理を依頼する
    void delete(int id) {
        mRepository.delete(id);
    }

    //リポジトリにチェック済み削除の処理を依頼する
    void deleteChk() {
        mRepository.deleteChk();
    }

    //リポジトリに更新の処理を依頼する
    void update(int id, boolean isChecked) {
        mRepository.update(id, isChecked);
    }

    public LiveData<String> getText() {
        return mText;
    }

}

■XMLにListView作成

ListViewで表示する1行の構成を「list_item.xml」ファイルに作成

※赤字の部分はクリックした行数取得するために必要

※更新するデータのidの保持方法が思いつかなかったので、行末に表示するために「txtId」作成

 
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:padding="4dp"
    android:descendantFocusability="blocksDescendants">
    <CheckBox
        android:id="@+id/check_box"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="4dp"
        android:layout_weight="1"
        android:clickable="false"
        android:focusable="false"
        android:focusableInTouchMode="false"

        android:text="買い物項目" />
    <TextView
        android:id="@+id/txtId"
        android:layout_width="30dp"
        android:layout_height="wrap_content"
        android:text="(99)" />
</LinearLayout>

「fragment_list.xml」ファイルにもListView追加

 
<LinearLayout
    android:layout_width="200dp"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <ListView
        android:id="@+id/list_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

ついでに「fragment_list.xml」ファイルにも新規登録用のTextEditやボタン追加したXML(参考用)

 
<EditText
    android:id="@+id/NewWordEdit"
    android:layout_width="160dp"
    android:layout_height="wrap_content"
    android:ems="20"
    android:inputType="text"
    android:text="" />
<Button
    android:id="@+id/btnAdd"
    android:layout_width="160dp"
    android:layout_height="100dp"
    android:text="リスト追加" />
    
<Button
    android:id="@+id/btnDelete"
    android:layout_width="160dp"
    android:layout_height="100dp"
    android:layout_marginTop="6dp"
    android:text="買い物おわり" />

 

 

まとめ③に続く