list_count에는 db에서 조회한 갯수가 들어있구요 getCount는 그걸 4로 나눠 몇줄이 표시되야 하는지를 나타냅니다.
계속해서 다시그려주는 건데 이상하게 12개가 넘어가면 4번째줄부터는 남은 칸들도 모두 첫번째 칸 아이콘으로 채워져 버립니다;;
레이아웃에는 버튼 4개 모두 invisible로 설정되어 있구요 혹시 뭐가 잘못된건지 아시는분 있으신가요??
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
final int pos = position;
if (convertView == null) {
convertView = inflater.inflate(itemlayout, parent, false);
}
convertView.setBackgroundResource(R.drawable.shelf3);
_view = convertView;
for(int j = 0; j < getCount; j ++)
{
if(pos == j)
{
if(list_count > 4)
{
for(int i = 0; i < 4; i++)
{
final int index = i;
final View getView = convertView;
title = (Cursor)AdapterProduct.getItem(i+4*j);
String img_name = title.getString(title.getColumnIndex("img"));
Log.e("3<", img_name);
int drawableResourceId = res.getIdentifier(img_name, "drawable", pack);
convertView.findViewById(R.id.img_catalog1+i).setBackgroundResource(drawableResourceId);
convertView.findViewById(R.id.img_catalog1+i).setVisibility(View.VISIBLE);
}
list_count = list_count - 4;
}else
{
for(int i = 0; i < list_count; i++)
{
final int index = i+4*j;
final int index2 = i;
final View getView = convertView;
title = (Cursor)AdapterProduct.getItem(i+4*j);
String img_name = title.getString(title.getColumnIndex("img"));
Log.e("3>", ""+j);
int drawableResourceId = res.getIdentifier(img_name, "drawable", pack);
convertView.findViewById(R.id.img_catalog1+i).setBackgroundResource(drawableResourceId);
convertView.findViewById(R.id.img_catalog1+i).setVisibility(View.VISIBLE);
}
}
}
}
if (convertView == null) {
convertView = inflater.inflate(itemlayout, parent, false);
}
이부분이 재사용 하는데 사용되는 코드입니다.
null인 경우 새로 만들어라 이거니 무조건 새로 만들면 되겠지요.
//if (convertView == null)
//{
convertView = inflater.inflate(itemlayout, parent, false);
//}
대신 스크롤이 많이 되거나 xml이 복잡하면 속도가 많이 느릴겁니다.
300초 내에 댓글 등록하면 ip막는다고 하네요. 심심해서 댓글놀이 하고 있는데 ㅋ
아래처럼 하면 코드가 간결해질것 같은데 어떤가요.
public int getCount()
{
return (list_count + 3) / 4
}
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
final int pos = position;
if (convertView == null) {
convertView = inflater.inflate(itemlayout, parent, false);
}
else
{
//이전 view 안보이게 설정
for(int nIndex = 0; nIndex < 4; nIndex ++)
convertView.findViewById(R.id.img_catalog1+nIndex).setVisibility(View.INVISIBLE);
}
convertView.setBackgroundResource(R.drawable.shelf3);
for(int nIndex = 0; nIndex < getCount; nIndex ++)
{
int nImageIndex = nIndex+4*position;
title = (Cursor)AdapterProduct.getItem(nImageIndex);
String img_name = title.getString(title.getColumnIndex("img"));
int drawableResourceId = res.getIdentifier(img_name, "drawable", pack);
convertView.findViewById(R.id.img_catalog1+nImageIndex).setBackgroundResource(drawableResourceId);
convertView.findViewById(R.id.img_catalog1+nImageIndex).setVisibility(View.VISIBLE);
}
return convertView;
}
저는 이만 퇴근 ㅎㅎ




소스가 전부 올라와 있지를 않네요.
위에 소스 만으로는 원인 파악이 힘들겠네요.
유추할 수 있는 경우는 리스트 뷰가 한화면에 3-4개 정도 보일경우 5-6번째부터는 convertView 재사용에 들어가게 됩니다.
이때 조건문에서 별다른 셋팅을 하지 않는경우 기존에 설정된 값이나 xml에 설정되어 있는 값이 출력되어서 깜박인다던가 동일한 이미지가 나올수 있습니다.