안녕하세요.
코드좀 봐주세요 ^^;;
-------------------------------------------------------------------------------------------
oProfile.add(new CameraItem(R.drawable.addcam_dummy));
CameraListAdapter adapter = new CameraListAdapter(
this,
R.layout.camera_list_item,
oProfile);
mDSVListView.setAdapter(adapter);
-------------------------------------------------------------------------------------------
public CameraListAdapter(Context context, int layout, ArrayList<CameraItem> profiles)
{
_inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);//= LayoutInflater.from(context);
_profiles = profiles;
_layout = layout;
System.out.println("test!!");
}
public View getView(int pos, View convertView, ViewGroup parent)
{
if(convertView == null) {
convertView = _inflater.inflate(_layout, parent, false);
}
System.out.println("pos : " + pos + " len : " + getCount());
}
--------------------------------------------------------------------------------------------
문제점:
test!!
pos : 0 len :1
pos : 0 len :1
pos : 0 len :1
원하는 출력:
test!!
pos : 0 len : 1
이렇게 호출된다는 것입니다...ㅠ 왜 아무것도 안했는데 .. getview가 왜 3번이 호출될까요??
아시는 분 있으시면 답변좀 부탁드릴께요 ^^
ArrayList<CameraItem> profiles 이 파라매터의 개수가 아마도 3개이거나
현재 화면에 표시가능한 Item 수가 3개라서 3번 불려질겁니다.
getView는 ListView의 Item 들이 불려질때 getView가 호출됩니다.
getView()가 언제 그리고 몇번 호출될 지는 보통 부모 ViewGroup에 영향을 받습니다.. getView()는 주로 measuring도는 레이아웃시에 호출이 되는데, Parent ViewGroup이 무엇이냐에 따라 여러번 불릴 수도 있으며 Parent ViewGroup이 LinearLayout인 경우 weight등이 있으면 또 불릴 수도 있습니다. 레이아웃의 결과를 내부적으로 cache할 수도 있으므로 실험에 의해 특정 상황에서만 불린다고 가정해 이에 의존적으로 해도 안됩니다. 여러번 호출되도 문제 없도록 작성하는 수밖에 없습니다.
화면에 몇개를 그릴수 있는지 알아보기 위해서 호출을 해보는 경우가 있습니다. 초기에 많은 수의 getView가 불릴수 있습니다.