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

커스텀 리스트뷰의 getView가 실행이 안됩니다.

0 추천

현재 뷰페이저 내의 프래그먼트에 리스트뷰(sound_music_list)를 하나 두고 이것을 커스텀 리스트뷰로 만들려 하고 있습니다.

현재 저 프래그먼트에 있는 완성된 커스텀 리스트뷰의 코드를 필요한 부분만 바꿔서 추가했습니다.

당연히 될거라고 생각했는데 어댑터 지정후에도 getView가 실행되지 않습니다.. 어찌된 일일까요?

자세한 설명은 코드에 주석으로 달아두었습니다

 

 

//커스텀 리스트뷰를 담당하는 클래스
        public class SoundList extends ArrayAdapter<String> {
            Activity context;
            ArrayList<String> list;
            public SoundList(Activity context,ArrayList<String> path) {
                super(context, R.layout.show_sound_list, path);   //show_sound_list 는 커스텀 리스트뷰의 디자인 xml파일
                Log.d("test","A=========");
                this.context = context;
                this.list = path;
            }

            @Override
            public View getView(int position, View view, ViewGroup parent) {   //위에는 호출이 되는데 getView가 호출이 안된다.
                Log.d("test","B=========");
                LayoutInflater inflater = context.getLayoutInflater();
                View rowView= inflater.inflate(R.layout.show_sound_list, null, true);   //커스텀 리스트뷰의 디자인파일
                TextView tv = rowView.findViewById(R.id.title);       //show_sound_list 파일 내의 텍스트뷰를 가져온다

                tv.setText(list.get(position));
                return rowView;
            }
        }

        //여기서 커스텀 리스트뷰 어댑터를 지정하고, 위의 클래스가 실행됩니다.
        public void showSoundInList(String tp){
            Log.d("test","C=========");
            LayoutInflater layoutInflater = (LayoutInflater)(getActivity()).getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View view = layoutInflater.inflate(R.layout.fragment_edit_sounds, null);        //fragment_edit_sounds 는 리스트뷰가 있는 프래그먼트다.
            ListView lv = view.findViewById(R.id.sounds_music_list);     //fragment_edit_sounds 내부의 리스트뷰를 가져온다

            ArrayList<String> list = new ArrayList<>();  //리스트 하나 만들고 내용 추가
            list.add("test1");
            list.add("test2");
            Log.d("test","D=========\n"+list);
            final SoundList adapter = new SoundList (getActivity(),list);   //SoundList 클래스로 어댑터 생성 여기가 실행되면  Log.d("test","A=========");  부분이 실행됨.
            lv.setAdapter(adapter);   //리스트뷰에 어댑터 지정. 그러나 getView가 실행되야 하는데 안된다.
        }

 

edisondl (970 포인트) 님이 4월 14일 질문

1개의 답변

0 추천
ListView lv 에  Adapter 만 추가 했을 뿐, 실제 UI 가 표시되는 화면에 addView 를 호출하는걸 빼 놓으셔서

 화면을 그릴 일이 없어 getView 가 불리지 않는 듯 합니다.
익명사용자 님이 4월 15일 답변
...