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

프래그먼트에서 불러온 어댑터의 recyclerview 안의 모든 TextView 선택하는 법

0 추천
for(int i=0; i<friendsList.size();i++)
{
          // i번째의 recyclerview 리스트아이템 선택          
         TextView tx = (TextView)itemView.findViewById(R.id.tx);
         tx.setVisible(GONE);
}

어댑터에서는 recyclerview의 아이템 전체에 접근이 안되겠지요?

선택된 아이템에만 접근 가능할거같아서

 

어댑터를 불러오는 프래그먼트에서 리스트에 들어있는 각각 아이템 안의 TextView 들 전체를 GONE 시켜주려고 하는데요

리스트아이템들 안의 TextView 전체선택을 어떻게 잡아와야 할지 감이 안오네요..ㅠ

 

mAdapter = new FriendsAdapter(getActivity(), mFriendList, new FriendsAdapter.RecyclerItemClickListener() {
            @Override
            public void onClickListener(Friend friends, int position) {

                Intent intentfr = new Intent(getContext(), FriendProfile.class);
                intentfr.putExtra("id", friends.getFr_id());
                startActivity(intentfr);

            }
        }, new FriendsAdapter.RecyclerItemLongClickListener() {
            @Override
            public void onLongClickListener(final Friend friend, final int position, View itemView) {

                final TextView red = (TextView)itemView.findViewById(R.id.red);
                final TextView grey = (TextView)itemView.findViewById(R.id.grey);

                grey.setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) {
                        Log.e("차단버튼","클릭됨");
                        gpsblock(friend.getFr_id(), 0);//gps 블락
                        red.setVisibility(View.GONE);
                        grey.setVisibility(View.GONE);
                    }
                });

                red.setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) {
                        Log.e("삭제버튼","클릭됨");
                        Delete(friend, position);//친구삭제

                    }
                });
            }
        });

 

파르네제 (2,030 포인트) 님이 2018년 3월 20일 질문
파르네제님이 2018년 3월 20일 수정
어댑터 내부에 선택한 아이템의 position을 저장하는 변수를 만들고 롱클릭할때, 해당 아이템의 adapterPosition을 넣어두면 될것같습니다
이후 다른 아이템을 롱클릭하게 되면 기존의 선택된 position의 아이템을 변경하고 notify해주면 됩니다. 그리고 새로 롱클릭한 아이템의 position은 저장을 하구요.

1개의 답변

0 추천
 
채택된 답변
설명해주기엔 자바에 대한 이해가 부족해 보여서 혹시 사용하는 adapter가있으면 코드 남겨주세요 수정이 필요한 부분에 sample 추가해서 답변달아드릴께욤
설춘식 (5,250 포인트) 님이 2018년 3월 20일 답변
파르네제님이 2018년 4월 3일 채택됨
관련 코드를 첨부하였습니다,
이전 문제에 대해 해결에 도움주셨던 분이시네요 감사합니다!

롱클릭을 하면 리싸이클러뷰의 롱클릭한 아이템에 grey와 red라는 TextView 버튼이 뜨게 해놓은건데요,
제가 원하던 질문드렸던 요지는, 아이템리스트가 A, B, C가 있다고 가정했을 때
A를 롱클릭해서 grey와 red를 띄운 상태에서
B를 롱클릭하면 A의 grey와 red는 setVisible(GONE) 되고
B의 grey와 red가 나타나는 것이지요

(첨부한 코드는 프래그먼트단이고, 롱클릭시 grey와 red를 visible 시켜주는코드는 어댑터단에 있습니다)

해서 제생각엔 리스트길이를 구해서 for문을 돌려서
아이템 포지션을 0부터 max까지 찍어주면서 GONE 시켜주면
전체 아이템의 grey, red 전부가 GONE 될터이니
제가 원하는 효과를 얻을거라 생각했는데
말씀하신대로 제가 이해가 많이 부족하여 쉽지 않네요ㅠ
우선 당장 해결해야 하니까 friend 객체에 boolean 값을 추가해서
이런식으로 쓸수있는 값으로 접근하시는게 어떨지요

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        Friend friend = mFriendList.get(position);
        if(!friend.isLongClick){
            holder.grey.setVisibility(View.GONE);
            holder.red.setVisibility(View.GONE);
        }else{
            holder.grey.setVisibility(View.VISIBLE);
            holder.red.setVisibility(View.VISIBLE);
        }
    }

adapter안에 method를 대충 아래와 같은 방법으로 추가해서 사용하시면 될거같습니다
전체적인 코드가 없어서
  public void longClickChange(int position){
        mFriendList <-수정하면 될듯
        notifyDataSetChanged();
    }
...