마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

리사이클러뷰 아이템 각각의 버튼이 조건에 따라 보이게 , 안보이게 설정하고 싶습니다.

0 추천

안녕하세요 프로젝트 만들던 중에 검색을 해도 도저히 해결이 안되서 질문합니다 ㅠㅠ 부탁드립니다 고수분들 

 

지금 상황을 보면 각각의 아이템에 버튼을 두고 리사이클러뷰로 보는 상황이고 글작성자와 로그인한 아이디가 같지 않으면 버튼을  invisible 처리 해놨습니다.

그래서 사진으로 보여드리자면  

1.

2.

3.

이렇게 입니다.

리뷰에 들어갔을때 1번처럼 처음에는 버튼이 잘 구현되어있습니다.

하지만 2번처럼 어느정도 밑으로 내렸을 시 일정구간부터는 글작성자임에도 불구하고 버튼이 안나옵니다.

또한, 다시 올라갔을 시 3번처럼 원래 보였던 버튼이 안보이게 됩니다..

리뷰에 들어갔을 시 버튼이 고정되게 되면 좋을것같은데 해결방법이 있을까요 

아래는 리사이클러뷰 어댑터 코드입니다!!

package com.example.main3;


import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.RatingBar;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.toolbox.Volley;

import org.json.JSONObject;

import java.util.ArrayList;

public class ReviewAdapter extends RecyclerView.Adapter<ReviewAdapter.ReviewViewHolder> {

    private ArrayList<MemberDTO> memberList;
    String Review_user;
    Context mContext;



    public class ReviewViewHolder extends RecyclerView.ViewHolder {
        protected  TextView tv_reviewtitle;
        protected  TextView tv_reviewuser;
        protected  TextView tv_reviewtime ;
        protected  TextView tv_reviewcontents ;
        protected  RatingBar tv_reviewscore;
        Button btn_delete;


        public ReviewViewHolder(View view) {
                super(view);
                tv_reviewtitle =(TextView)view.findViewById(R.id.tv_reviewtitle);
                tv_reviewuser=(TextView)view.findViewById(R.id.tv_reviewuser);
                tv_reviewtime =(TextView)view.findViewById(R.id.tv_reviewtime);
                tv_reviewcontents =(TextView)view.findViewById(R.id.tv_reviewcontents);
                tv_reviewscore =(RatingBar) view.findViewById(R.id.tv_score);
                btn_delete = (Button) view.findViewById(R.id.btn_delete);

        }
    }


    public ReviewAdapter(ArrayList<MemberDTO> list , String Review_user , Context mContext) {
        this.memberList = list;
        this.Review_user = Review_user;
        this.mContext = mContext;
    }



    @Override
    public ReviewViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {


        View view = LayoutInflater.from(viewGroup.getContext())
                .inflate(R.layout.reviews, viewGroup, false);

        ReviewViewHolder viewHolder = new ReviewViewHolder(view);

        return viewHolder;
    }



    @Override
    public void onBindViewHolder(@NonNull final ReviewViewHolder viewholder, final int position) {

        viewholder.tv_reviewtitle.setText("제목  : " +memberList.get(position).getReview_title());
        viewholder.tv_reviewuser.setText("글작성자 : "+ memberList.get(position).getReview_user());
        viewholder.tv_reviewtime.setText("작성시간: " + memberList.get(position).getReview_time());
        viewholder.tv_reviewscore.setRating(memberList.get(position).getReview_score());
        viewholder.tv_reviewcontents.setText("내용 : " + memberList.get(position).getReview_contents());

        if(!Review_user.equals(memberList.get(position).getReview_user())){
            viewholder.btn_delete.setVisibility(View.GONE);
        }

       viewholder.btn_delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                    final AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
                    builder.setTitle("삭제");
                    builder.setMessage("해당 항목을 삭제하시겠습니까?");
                    builder.setPositiveButton("아니오",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int which) {
                                    dialog.cancel();
                                }
                            });
                    builder.setNegativeButton("예",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int which) {
                                    Response.Listener<String> responseListener = new Response.Listener<String>(){

                                        @Override
                                        public void onResponse(String response) {
                                            String result = null;
                                            try{
                                                JSONObject jsonResponse = new JSONObject(response);
                                                boolean success = jsonResponse.getBoolean("success");
                                                if(success) {//사용할 수 있는 아이디라면
                                                    Toast.makeText(mContext,"리뷰 삭제가 완료되었습니다.",Toast.LENGTH_SHORT).show();
                                                    memberList.remove(position);
                                                    notifyItemRemoved(position);
                                                    notifyItemRangeChanged(position, memberList.size());
                                                }
                                                else{
                                                    Toast.makeText(mContext,"리뷰 삭제가 실패되었습니다.",Toast.LENGTH_SHORT).show();
                                                }
                                            }
                                            catch(Exception e){
                                                e.printStackTrace();
                                            }
                                        }
                                    };//Response.Listener 완료

                                    //Volley 라이브러리를 이용해서 실제 서버와 통신을 구현하는 부분
                                    ReviewdeRequest reviewderequest = new ReviewdeRequest(memberList.get(position).getReview_title(),memberList.get(position).getReview_user(),
                                            memberList.get(position).getReview_time(), responseListener);
                                    RequestQueue queue = Volley.newRequestQueue(mContext);
                                    queue.add(reviewderequest);

                                }
                            });
                    builder.show();

                }
            });
    }

    @Override
    public int getItemCount() {
        return memberList.size();
    }





}

 

7533ymh (120 포인트) 님이 2020년 6월 7일 질문

2개의 답변

0 추천

getItemViewType를 override해서 버튼 없는 뷰, 있는 뷰 따로 만들어 주세요.

https://lktprogrammer.tistory.com/190 여기 참고하시면 도움이 될 것 같네요

익명사용자 님이 2020년 6월 8일 답변
...