🎯 目的
この章では、「シンプルなToDoリストアプリ」を通して、以下の知識を実践的に統合して身につけます:
機能/役割 | 使用するコンポーネント |
---|---|
画面表示・UI | Activity , XML , RecyclerView |
状態管理 | ViewModel , LiveData |
データ保存 | Room (SQLiteのラッパー) |
UI更新 | RecyclerView.Adapter + LiveData |
🗂 アプリの構成イメージ
- MainActivity:ToDo一覧を表示(RecyclerView)+追加ボタンあり
- ViewModel:RoomとRecyclerViewの橋渡し。状態を保持。
- Room:データベースにToDoを保存。
- RecyclerView:ToDoアイテムをリストで表示。
🧩 各コンポーネントの役割
① Activity
:UIの土台
画面の制御をするクラスです。ボタンやリストビューを表示し、ユーザーの操作に応じてViewModelを呼び出します。
MainViewModel viewModel = new ViewModelProvider(this).get(MainViewModel.class);
viewModel.getTodoList().observe(this, todos -> {
adapter.submitList(todos);
});
② ViewModel
:UIに依存しないロジック保持
- Roomのデータを LiveData で保持
- UI(Activity)は LiveData を observe(監視)して、変更時に自動で更新される
public class MainViewModel extends AndroidViewModel {
private final TodoRepository repo;
private final LiveData<List<Todo>> todoList;
public MainViewModel(@NonNull Application app) {
super(app);
repo = new TodoRepository(app);
todoList = repo.getAllTodos();
}
public LiveData<List<Todo>> getTodoList() {
return todoList;
}
public void addTodo(String title) {
repo.insert(new Todo(title));
}
}
③ RecyclerView
:リスト表示のUI部品
ToDoリストを表示するための部品で、各アイテムを効率的に再利用して描画します。Adapter
クラスを使って、データとUIを橋渡しします。
public class TodoAdapter extends ListAdapter<Todo, TodoAdapter.TodoViewHolder> {
// ViewHolderなどを定義
}
④ Room
:データ保存のためのDBラッパー
SQLiteの代わりに、アノテーションベースでDB操作を簡単に行える仕組みです。
@Entity
public class Todo {
@PrimaryKey(autoGenerate = true)
public int id;
@NonNull
public String title;
public Todo(@NonNull String title) {
this.title = title;
}
}
@Dao
public interface TodoDao {
@Query("SELECT * FROM Todo ORDER BY id DESC")
LiveData<List<Todo>> getAll();
@Insert
void insert(Todo todo);
}
🔄 連携の流れ(全体)

🧪 実装のポイント
- データの流れは一方向:Activity → ViewModel → Repository → Room
- 状態管理はViewModelが中心:画面回転でもデータが消えない
- RoomとLiveDataでDB更新がUIに反映される
🛠 練習課題(発展)
- ToDoのチェック機能(完了フラグ)
- アイテムの削除機能(スワイプ対応)
- 日時や優先度の追加
- DataBinding の導入による UI ロジック簡略化
💡 まとめ
このToDoリストアプリを通じて、以下の「Android開発における定番構成」を実践的に理解することができます:
- ViewModelとLiveDataによる状態管理
- RecyclerViewによるリスト表示
- Roomによる永続化
- Activityとの連携