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

커스텀 grid view에서 checkbox를 visible/invisible하는 코드를 작성하였는데 제일 처음에 있는(postion=0) 체크박스가 사라지지 않습니다.

0 추천

이미지뷰와 체크박스가 들어있는 아이템 뷰를 만들고 grid layout와 ArrayList를 사용하여 정렬하였습니다.

아이템뷰를 long press할때 체크박스가 보였다 안보였다하기위해서  getView에 onItemLongClick이벤트를 넣어 아래와같이 코드를 작성하였습니다.

아이템뷰를 long press하여 invisible, visible하는 것을 체크해봤더니 

맨 처음에 안보였다 보여지는 long press event는 먹히는데 그 이후에 long press event를 진행하면 다른 모든 체크박스는 나타났다 사라졌다를 반복하는데, grid layout 제일 처음에 있는 아이템 뷰(position=0)의 체크박스만 사라지지 않습니다.

set visible, invisible하는 부분을 찍어봐도  mArrData.get(0)의 체크박스 내용이 다른 체크박스와 함께 보였다 안보였다를 반복해서 바뀌고있는데 레이아웃상엔 먹히지 않으니 답답해 미치겠습니다.

 
혹시 왜 이런지 아는 고수분 계시면 이유나 해결방안 좀 부탁드립니다ㅠㅠㅠ

 

private class ImageAdapter extends BaseAdapter {
        private Context mContext;
        private int mCellLayout;
        private LayoutInflater mLiInflater;
        private ArrayList<MarkerItem> AData; //grid array list data
.
.
public View getView(final int position, View convertView,ViewGroup parent) {

            if (convertView == null) {
                convertView = mLiInflater.inflate(mCellLayout, parent, false);
                convertView.setLayoutParams( new GridView.LayoutParams( width, width ) );
                ImageViewHolder holder = new ImageViewHolder();

                holder.veiwImage = (ImageView) convertView.findViewById(R.id.item_image);
                holder.checkImage = (CheckBox) convertView.findViewById(R.id.item_check);
.
.
            mGvImageList.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

                @Override
                public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int position, long arg3) {

                    if (show_ck) {   
                        for (int i = 0; i < getCount(); i++) {
                            mAData.get(i).checkbox.setVisibility(View.INVISIBLE);
                        }
                    } else {
                        for (int i = 0; i < getCount(); i++) {
                            mAData.get(i).checkbox.setVisibility(View.VISIBLE);
                        }
                    }
                    mListAdapter.notifyDataSetChanged();

                    return false;
                }
            });

바라나난 (180 포인트) 님이 2016년 3월 31일 질문
바라나난님이 2016년 3월 31일 수정

1개의 답변

0 추천

자체해결했습니다.

   if (convertView == null) { }안에 holder.chkImage를 visible, invisible해주고, 

View getView 안 mListAdapter.notifyDataSetChanged();를 제거하니까 되네요.

어제 하루종일 속썩이더니 질문 올리자마자 해결되니까 좀 민망합니다ㅋㅋㅋ;;;

바라나난 (180 포인트) 님이 2016년 3월 31일 답변
바라나난님이 2016년 3월 31일 수정
자체해결이 제일 도움됬을겁니다.^^
...