diff --git a/app/src/main/java/com/example/tampopo_client/models/Activity.java b/app/src/main/java/com/example/tampopo_client/models/Activity.java index 7c3d626..6dcf984 100644 --- a/app/src/main/java/com/example/tampopo_client/models/Activity.java +++ b/app/src/main/java/com/example/tampopo_client/models/Activity.java @@ -13,6 +13,9 @@ this.updateTime = updateTime; } + public Activity() { + } + public String getUserId() { return userId; } diff --git a/app/src/main/java/com/example/tampopo_client/viewmodels/ActivityViewModel.java b/app/src/main/java/com/example/tampopo_client/viewmodels/ActivityViewModel.java index 3df02a7..810bc38 100644 --- a/app/src/main/java/com/example/tampopo_client/viewmodels/ActivityViewModel.java +++ b/app/src/main/java/com/example/tampopo_client/viewmodels/ActivityViewModel.java @@ -40,6 +40,8 @@ private final Map>> friendToActivitiesLiveData; // <フレンドのユーザーID, フレンドのアクティビティのリスト> private final MutableLiveData> friendUserIdsLiveData; // フレンドのユーザーIDのリスト + private List prevFriendUserIds = null; + private final String myUserId; private final String myToken; @@ -62,7 +64,7 @@ activitiesResource = retrofit.create(ActivitiesResource.class); userResource = retrofit.create(UserResource.class); - friendToActivitiesLiveData = Map.of(); + friendToActivitiesLiveData = new HashMap<>(); friendUserIdsLiveData = new MutableLiveData<>(List.of()); myLatestActivityLiveData = new MutableLiveData<>(null); @@ -263,27 +265,30 @@ @Override public void onResponse(@NonNull Call> call, @NonNull Response> response) { if (response.isSuccessful()) { - friendUserIdsLiveData.postValue(response.body()); // MEMO: 入れ込んだだけ // フレンドのIDをアクティビティ更新順に並べ替える List friendUserIds = friendUserIdsLiveData.getValue(); - SortedSet friends = new TreeSet<>(new Friend.UpdateTimeComparator()); + if (prevFriendUserIds == null || !prevFriendUserIds.equals(friendUserIds)) { + prevFriendUserIds = friendUserIds; + friendUserIdsLiveData.postValue(response.body()); + SortedSet friends = new TreeSet<>(new Friend.UpdateTimeComparator()); - assert friendUserIds != null; - friendUserIds.forEach(userId -> { - List activities = getActivitiesLiveDataFromUserId(userId).getValue(); - if (activities == null || activities.isEmpty()) { - return; - } + assert friendUserIds != null; + friendUserIds.forEach(userId -> { + List activities = getActivitiesLiveDataFromUserId(userId).getValue(); + if (activities == null || activities.isEmpty()) { + return; + } - Activity latestActivity = activities.get(0); - friends.add(new Friend(userId, latestActivity.getUpdateTime())); - }); + Activity latestActivity = activities.get(0); + friends.add(new Friend(userId, latestActivity.getUpdateTime())); + }); - // 並び替えたフレンドのユーザーIDを順番に格納して更新する - sortedFriendUserIds.clear(); - friends.forEach(friend -> sortedFriendUserIds.add(friend.getUserId())); + // 並び替えたフレンドのユーザーIDを順番に格納して更新する + sortedFriendUserIds.clear(); + friends.forEach(friend -> sortedFriendUserIds.add(friend.getUserId())); + } } } @@ -305,6 +310,9 @@ * @return 取得対象のユーザーのアクティビティのリストのライブデータ */ public MutableLiveData> getActivitiesLiveDataFromUserId(String userId) { + if(!friendToActivitiesLiveData.containsKey(userId)){ + friendToActivitiesLiveData.put(userId, new MutableLiveData<>()); + } return friendToActivitiesLiveData.get(userId); } diff --git a/app/src/main/java/com/example/tampopo_client/views/MainActivity.java b/app/src/main/java/com/example/tampopo_client/views/MainActivity.java index 19dca60..d75baff 100644 --- a/app/src/main/java/com/example/tampopo_client/views/MainActivity.java +++ b/app/src/main/java/com/example/tampopo_client/views/MainActivity.java @@ -317,6 +317,8 @@ // Activity activity = entry; FriendIconView userView = userViews.get(friendId); + MutableLiveData> activitiesLiveData = activityViewModel.getActivitiesLiveDataFromUserId(friendId); + if (userView == null) { // 新しいユーザなので、アイコン+コメントを作成 @@ -351,6 +353,7 @@ // Mapに登録、画面に追加 userViews.put(friendId, container); messageList.addView(container); + activitiesLiveData.observeForever(container); // } else { // // 既に表示されている → コメントだけ更新