diff --git a/app/src/main/java/com/example/nemophila/RequestingActivity.java b/app/src/main/java/com/example/nemophila/RequestingActivity.java index 6adf436..bd285aa 100644 --- a/app/src/main/java/com/example/nemophila/RequestingActivity.java +++ b/app/src/main/java/com/example/nemophila/RequestingActivity.java @@ -2,6 +2,7 @@ import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; +import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; @@ -16,9 +17,13 @@ import android.widget.EditText; import android.widget.TextView; +import com.example.nemophila.entities.AccountNameJson; +import com.example.nemophila.entities.Post; +import com.example.nemophila.viewmodels.FriendViewModel; import com.example.nemophila.viewmodels.PostsViewModel; import java.util.ArrayList; +import java.util.Collection; import java.util.List; public class RequestingActivity extends AppCompatActivity { @@ -59,12 +64,11 @@ }); //RecyclerView(表示の設定、直接表示するところはLivedataを購読しているonChanged内にしたい) - List requestingDataSet = new ArrayList<>(); - List RequestingDataList = new ArrayList<>(); + List requestingDataList = new ArrayList<>(); //xmlからrvにRecyclerViewを取得、アダプターを宣言 RecyclerView rv = (RecyclerView) findViewById(R.id.requestingList); - RequestingActivity.RequestingAdapter adapter = new RequestingActivity.RequestingAdapter(RequestingDataList); + RequestingAdapter adapter = new RequestingAdapter(requestingDataList); //一行ずつを縦に(LinearLayout)表示するLayoutManagerを宣言 LinearLayoutManager llm = new LinearLayoutManager(this); @@ -77,17 +81,44 @@ rv.setLayoutManager(llm); - //表示テスト用に仮データ - List testDataSet = new ArrayList<>(); - for (int i = 0; i < 15; i++) { - RequestingDataModel data = new RequestingDataModel(); - data.setName("ネモフィラ太郎"+ i + "号(テスト)"); + //申請先の一覧をLiveDataから受け取る + //ViewModelを宣言し、LiveDataへの購読 + FriendViewModel friendViewModel = new ViewModelProvider(this).get(FriendViewModel.class); + friendViewModel.getRequestingLiveData().observe(this, new Observer>() { + //データに変更があった時実行 + @Override + public void onChanged(Collection requestingUsers) { - testDataSet.add(data); - } - //onChange内に書くべき表示部分 - adapter.setList(testDataSet); - rv.setAdapter(adapter); + //表示用のDataListを一旦クリアし、LiveDataから受け取ったデータを一つずつセット(重複しないように) + requestingDataList.clear(); + //受け取ったLivedataの要素分繰り返し、セット + for (AccountNameJson user: requestingUsers) { + //dataを宣言 dataに投稿の必要なデータをセットし、それをpostsDatasetに追加してリストを作る + RequestingDataModel data = new RequestingDataModel(); + data.setName(user.getName()); + + //投稿一つの情報がdataに全部セットされたらDatasetに追加 + requestingDataList.add(data); + } + + //onChange内に書くべき表示部分 + adapter.setList(requestingDataList); + rv.setAdapter(adapter); + } + }); + + +// //表示テスト用に仮データ +// List testDataSet = new ArrayList<>(); +// for (int i = 0; i < 15; i++) { +// RequestingDataModel data = new RequestingDataModel(); +// data.setName("ネモフィラ太郎"+ i + "号(テスト)"); +// +// testDataSet.add(data); +// } +// //onChange内に書くべき表示部分 +// adapter.setList(testDataSet); +// rv.setAdapter(adapter); } @@ -97,29 +128,41 @@ //とりあえずnameのみで作成 //Adapter - public class RequestingAdapter extends RecyclerView.Adapter { + public class RequestingAdapter extends RecyclerView.Adapter { - private List list; + private List list; - public RequestingAdapter(List list) { + public RequestingAdapter(List list) { this.list =list; } - public void setList(List list) { + public void setList(List list) { this.list = list; } @NonNull @Override - public RequestingActivity.RequestingViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - + public RequestingViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + //1データあたりのレイアウトを読み込み、ビューホルダーを宣言 View inflate = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_requesting_activity, parent,false); - RequestingActivity.RequestingViewHolder vh = new RequestingActivity.RequestingViewHolder(inflate); + RequestingViewHolder vh = new RequestingViewHolder(inflate); + + // リスト内のボタンを押した時の処理 + vh.deleteButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + int position = vh.getBindingAdapterPosition(); + // 処理はonItemClickに + onItemClick(v, position, list.get(position)); + } + }); + return vh; + } @Override - public void onBindViewHolder(@NonNull RequestingActivity.RequestingViewHolder holder, int position) { + public void onBindViewHolder(@NonNull RequestingViewHolder holder, int position) { holder.nameView.setText(list.get(position).getName()); } @@ -127,15 +170,21 @@ public int getItemCount() { return list.size(); } + + void onItemClick(View view, int position, RequestingDataModel requesting) { + // このメソッドをActivity内でオーバーライドして、クリックイベントの処理を設定する + } } //ViewHolder public class RequestingViewHolder extends RecyclerView.ViewHolder { public TextView nameView; + public Button deleteButton; public RequestingViewHolder(@NonNull View itemView) { super(itemView); nameView = (TextView) itemView.findViewById(R.id.requestingName); + deleteButton = itemView.findViewById(R.id.requestingDeleteButton); } }