Android Studio
[Android Studio] 화면 업데이트 하는 방법 _ ArrayList, like
처카푸
2024. 6. 17. 09:30
화면에서 다이얼로그 띄운 뒤,
유저의 선택에 따라서 동일한 화면을 업데이트하는 방법
Intent를 사용하지 않고 화면 업데이트 하는 방법 2가지
화면 업데이트 -> 데이터가 저장되어 있는 메모리를 업데이트 하는 것이다.
내가 업데이트하고 싶은 화면은 어레이 리스트를 보여주는 화면이다.
1. 어레이 리스트를 가져오는 내가 만든 함수 getNetworkData()를 public으로 설정해서 업데이트해 준다
- ((MainActivity) context). getNetworkData();
public void onResponse(Call<Res> call, Response<Res> response) {
dismissProgress();
if(response.isSuccessful()){
((MainActivity)context).getNetworkData();
}
2. 사용자가 선택한 리스트의 인덱스 변호를 삭제하고,
데이터가 바뀐 것을 알려준다.
- memoArrayList.remove(index);
notifyDataSetChanged();
public void onResponse(Call<Res> call, Response<Res> response) {
dismissProgress();
if(response.isSuccessful()){
memoArrayList.remove(index);
notifyDataSetChanged();
}
3. 유저의 선택에 따라 좋아요 화면 업데이트하기
imgLike.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int index = getAdapterPosition();
Posting posting = postingArrayList.get(index);
if(posting.isLike == 0){
setPostingLike( posting );
}else if(posting.isLike == 1){
deletePostingLike( posting );
}
}
});
}
private void deletePostingLike(Posting posting) {
Retrofit retrofit = NetworkClient.getRetrofitClient(context);
PostingApi api = retrofit.create(PostingApi.class);
SharedPreferences sp = context.getSharedPreferences(Config.SP_NAME, Context.MODE_PRIVATE);
String token = sp.getString("token", "");
Call<Res> call = api.deletePostingLike("Bearer "+token, posting.id);
call.enqueue(new Callback<Res>() {
@Override
public void onResponse(Call<Res> call, Response<Res> response) {
if(response.isSuccessful()){
posting.isLike = 0;
notifyDataSetChanged();
}else{
}
}
@Override
public void onFailure(Call<Res> call, Throwable throwable) {
}
});
}
private void setPostingLike(Posting posting) {
Retrofit retrofit = NetworkClient.getRetrofitClient(context);
PostingApi api = retrofit.create(PostingApi.class);
SharedPreferences sp = context.getSharedPreferences(Config.SP_NAME, Context.MODE_PRIVATE);
String token = sp.getString("token", "");
Call<Res> call = api.setPostingLike("Bearer "+token, posting.id);
call.enqueue(new Callback<Res>() {
@Override
public void onResponse(Call<Res> call, Response<Res> response) {
if(response.isSuccessful()){
// 좋아요를 진한 파랑색으로 바꾸는 법
posting.isLike = 1;
notifyDataSetChanged();
}else{
}
}
@Override
public void onFailure(Call<Res> call, Throwable throwable) {
}
});
}
* AlertDialog 전체
더보기
더보기
private void showAlertDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setCancelable(true);
builder.setTitle("메모 삭제");
builder.setMessage("정말 삭제 하시겠습니까?");
builder.setPositiveButton("YES", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
showProgress();
Retrofit retrofit = NetworkClient.getRetrofitClient(context);
MemoApi api = retrofit.create(MemoApi.class);
SharedPreferences sp = context.getSharedPreferences(Config.SP_NAME, MODE_PRIVATE);
String token = sp.getString("token", "");
index = getAdapterPosition();
Memo memo = memoArrayList.get(index);
Call<Res> call = api.deleteMemo(memo.getId(), "Bearer "+token);
call.enqueue(new Callback<Res>() {
@Override
public void onResponse(Call<Res> call, Response<Res> response) {
dismissProgress();
if(response.isSuccessful()){
// ((MainActivity)context).getNetworkData();
memoArrayList.remove(index);
notifyDataSetChanged();
}else{
}
}
@Override
public void onFailure(Call<Res> call, Throwable throwable) {
dismissProgress();
return;
}
});
}
});
builder.setNegativeButton("NO", null);
builder.show();
}
});