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 58dbaf8..20e07a1 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 @@ -26,31 +26,30 @@ import java.util.List; /** - * A fragment representing a list of Items. + * 友達申請(受信リスト)を表示するための Fragment クラス */ public class FriendReceivedFragment extends Fragment { - // TODO: Customize parameter argument names + // RecyclerView を縦に並べるか、グリッドで並べるかを制御するためのカラム数 private static final String ARG_COLUMN_COUNT = "column-count"; // TODO: Customize parameters - private int mColumnCount = 1; + private int mColumnCount = 1; // デフォルトは1列(縦方向リスト) + // アプリ全体で共有するクラス(ユーザー情報やトークンを持っている) private Tampopo tampopo; + // RecyclerView のアダプタ(友達申請を表示する) private MyFriendRequestRecyclerViewAdapter adapter; - /** - * Mandatory empty constructor for the fragment manager to instantiate the - * fragment (e.g. upon screen orientation changes). - */ + // デフォルトのコンストラクタ(Fragmentは必須) public FriendReceivedFragment() { } - // TODO: Customize parameter initialization + // この Fragment をインスタンス化するときに、カラム数を指定するためのファクトリーメソッド @SuppressWarnings("unused") public static FriendReceivedFragment newInstance(int columnCount) { FriendReceivedFragment fragment = new FriendReceivedFragment(); Bundle args = new Bundle(); - args.putInt(ARG_COLUMN_COUNT, columnCount); + args.putInt(ARG_COLUMN_COUNT, columnCount); // 引数に列数を渡す fragment.setArguments(args); return fragment; } @@ -59,47 +58,58 @@ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + // newInstance で渡された引数を取り出す if (getArguments() != null) { mColumnCount = getArguments().getInt(ARG_COLUMN_COUNT); } } + //Fragment のレイアウトを作成する部分 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + // レイアウト XML を読み込む View view = inflater.inflate(R.layout.fragment_friend_received_list, container, false); + // ViewModel を取得(友達関連の操作をまとめた ViewModel) FriendViewModel friendViewModel = new ViewModelProvider(this).get(FriendViewModel.class); + // Application クラスからユーザー情報を取得 tampopo = (Tampopo) getActivity().getApplication(); - String receiverId = tampopo.getUserId(); - String token = tampopo.getToken(); + String receiverId = tampopo.getUserId(); // 自分のユーザーID + String token = tampopo.getToken(); // 認証トークン // Add some sample items. // for (int i = 1; i <= 30; i++) // FriendRequestContent.addItem(new FriendRequestContent.FriendRequestItem(Integer.toString(i), "ユーザ名" + i)); - // Set the adapter + // RecyclerView の初期化 if (view instanceof RecyclerView) { Context context = view.getContext(); RecyclerView recyclerView = (RecyclerView) view; + // 1列なら縦スクロールリスト、2列以上ならグリッド表示 if (mColumnCount <= 1) { recyclerView.setLayoutManager(new LinearLayoutManager(context)); } else { recyclerView.setLayoutManager(new GridLayoutManager(context, mColumnCount)); } + // アダプタを生成してセット(最初は空のリストを渡す) adapter = new MyFriendRequestRecyclerViewAdapter(new ArrayList<>(), friendViewModel, receiverId, token); recyclerView.setAdapter(adapter); } return view; } + //View が作成されたあとに呼ばれる。ここで LiveData の監視を始める。 @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); + // 受信した友達申請を管理する ViewModel を取得 FriendReceivedRequestViewModel friendReceivedRequestViewModel = new ViewModelProvider(this).get(FriendReceivedRequestViewModel.class); + // サーバーから受信した友達リクエスト一覧をロード friendReceivedRequestViewModel.loadReceivedRequests(tampopo.getToken()); + // LiveData を監視して、データが変わったら RecyclerView に反映 friendReceivedRequestViewModel.getReceivedRequestsLiveData().observe(getViewLifecycleOwner(), new Observer>() { // LiveData に変更があったとき(新しい友達リクエストのリストが届いたとき)に呼ばれるメソッド