개발학습일지

[Android Studio] 화면 업데이트 하는 방법 _ ArrayList, like 본문

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();

                }
            });