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

리스트값 변경 후 컬러를 넣으려는데 갱신을 하면 컬러가 안넣어집니다.

0 추천

안녕하세요 안드로이드초보입니다. 여태껏 막힌적은 굉장히 많았는데 이렇게 검색을 해도 안나오는 경우는 처음이라 이렇게 질문을 올리게 되었습니다. 

리스트뷰 아이템을 누르고 버튼을 누르면 선택한 아이템값이 수정되면서 컬러가 넣어지는것을 만드는중인데 리스트뷰를 notifyDataSetChanged로 갱신하면 값은 변경되지만 컬러가 넣어지질않습니다. 순서가 문제인가 해서 순서를 바꿔봤는데도 똑같네요.. 제가 안드로이드 내부적인 문제는 잘 모르다보니 몇주 째 이 상태에서 진전이 없네요 어떤것이 잘못됐는지 알 수 있을까요??? 부탁드립니다.

      public View getView(final int position, View view, ViewGroup parent) {
            LayoutInflater inflater = context.getLayoutInflater();

            View rowView = inflater.inflate(R.layout.items1, null, true);
             final TextView fruit =(TextView) rowView.findViewById(R.id.textView1);
             int posi=position;

             fruit.setText(list.get(posi));


            gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

                       public void onItemClick(AdapterView<?> adapterView, View view, int i, long I) {

                                 final View color = view;
                                 final int pos = i;

             button1.setOnClickListener(new Button.OnClickListener() {
                                 @Override
                                 public void onClick(View v)
                                    {


                                      list.remove(pos);
                                      list.add(pos, "2");
                              color.setBackgroundColor(Color.GREEN);
                              notifyDataSetChanged();

                                            }
});

 

마자용 (120 포인트) 님이 2018년 9월 22일 질문

2개의 답변

0 추천
익명사용자 님이 2018년 9월 23일 답변
0 추천

위의 코드는 리스트 아이템의 버튼을 클릭했을 때 이벤트 처리하는 코드로는 좀 잘못된 것 처럼 보입니다.

 

gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

 public void onItemClick(AdapterView<?> adapterView, View view, int i, long I) {
 
                                 final View color = view;
                                 final int pos = i;
                                      list.remove(pos);
                                      list.add(pos, "2");
                              color.setBackgroundColor(Color.GREEN);
                              notifyDataSetChanged();       
}

...

 

이렇게 하던가 아니면

아답터 의 getView에서 리스트 아이템 뷰를 생성한 다음 button을 찾아서 setOnClickListener를 설정해야 할 것 같은데요

 

final Button button =(Button) rowView.findViewById(R.id.button);

button.setOnClickListener(new View.OnClickListener() {

                                 @Override

                                 public void onClick(View v)

                                    {

                                      list.remove(pos);

                                      list.add(pos, "2");

                              color.setBackgroundColor(Color.GREEN);

                              notifyDataSetChanged();

                                            }

});

 

일단 onClick이나 onItemClick이 제대로 호출되는지 로그를 넣어서 확인해 보세요

Log.d("test","onClick");

리스트 아이템에 이벤트가 전달되지 않아서 버튼이 클릭이 되지 않는 경우도 있어요. 

이경우에는  

  • ListView 는  android:focusable="true" 로 설정하고
  • Button은   android:focusable="false"로 설정해 보세요
luxsoft (1,780 포인트) 님이 2018년 9월 27일 답변
luxsoft님이 2018년 9월 27일 수정
...