diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 0897082..639c779 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -4,6 +4,7 @@ diff --git a/app/src/main/java/com/example/tampopo_client/views/FriendReceivedFragment.java b/app/src/main/java/com/example/tampopo_client/views/FriendReceivedFragment.java index b5a8976..c61d818 100644 --- a/app/src/main/java/com/example/tampopo_client/views/FriendReceivedFragment.java +++ b/app/src/main/java/com/example/tampopo_client/views/FriendReceivedFragment.java @@ -35,6 +35,10 @@ private int mColumnCount = 1; private Tampopo tampopo; + // RecyclerView のアダプタをフィールドとして保持し、データ変更時に更新通知できるようにする + private MyFriendRequestRecyclerViewAdapter adapter; + // 受信フレンド申請取得用の ViewModel(再表示時にも再利用する) + private FriendReceivedRequestViewModel friendReceivedRequestViewModel; /** * Mandatory empty constructor for the fragment manager to instantiate the @@ -87,7 +91,10 @@ } else { recyclerView.setLayoutManager(new GridLayoutManager(context, mColumnCount)); } - recyclerView.setAdapter(new MyFriendRequestRecyclerViewAdapter(FriendRequestContent.ITEMS, friendViewModel, receiverId, token)); + + // アダプタをフィールドに保持しておき、後でデータ更新時に notifyDataSetChanged() を呼び出す + adapter = new MyFriendRequestRecyclerViewAdapter(FriendRequestContent.ITEMS, friendViewModel, receiverId, token); + recyclerView.setAdapter(adapter); } return view; } @@ -95,17 +102,50 @@ @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - FriendReceivedRequestViewModel friendReceivedRequestViewModel = new ViewModelProvider(this).get(FriendReceivedRequestViewModel.class); + // ViewModel はフィールドに保持しておき、onResume などからも再利用できるようにする + friendReceivedRequestViewModel = new ViewModelProvider(this).get(FriendReceivedRequestViewModel.class); + + // 画面生成直後にも最新の受信申請を取得 friendReceivedRequestViewModel.loadReceivedRequests(tampopo.getToken()); + friendReceivedRequestViewModel.getReceivedRequestsLiveData().observe(getViewLifecycleOwner(), new Observer>() { - // LiveData に変更があったとき(新しい友達リクエストのリストが届いたとき)に呼ばれるメソッド @Override public void onChanged(List friendRequests) { - for (FriendRequest f: friendRequests) { - FriendRequestContent.addItem(new FriendRequestContent.FriendRequestItem(f.getSenderId(), "ユーザー名")); + // まず既存の一覧をクリアし、最新の内容でリストを作り直す + FriendRequestContent.ITEMS.clear(); + FriendRequestContent.ITEM_MAP.clear(); + + if (friendRequests != null) { + String myUserId = tampopo != null ? tampopo.getUserId() : null; + + for (FriendRequest f : friendRequests) { + // 自分宛て(自分が receiver )のリクエストのみを受信一覧として表示 + if (myUserId == null || myUserId.equals(f.getReceiverId())) { + FriendRequestContent.addItem( + new FriendRequestContent.FriendRequestItem( + f.getSenderId(), + "ユーザー名" // TODO: 必要に応じて実際のユーザー名に差し替え + ) + ); + } + } + } + + // データが更新されたことをRecyclerViewのアダプタに通知して画面を更新 + if (adapter != null) { + adapter.notifyDataSetChanged(); } } }); } + + @Override + public void onResume() { + super.onResume(); + // 「保留中」タブに戻ってきたタイミングでも、毎回最新の受信フレンド申請を取得する + if (tampopo != null && friendReceivedRequestViewModel != null) { + friendReceivedRequestViewModel.loadReceivedRequests(tampopo.getToken()); + } + } } \ No newline at end of file