0
ViewHolder 클래스를 활용하도록 사용자 지정 ListView 및 어댑터를 다시 구성한 후 처음에는 코드가 작동하는 것처럼 보였습니다. 그러나 맨 아래로 스크롤하여 목록에 항목을 추가하면 목록 요소가 갑자기 클릭 할 수 없게됩니다. ViewHolder를 사용하기 전에는 그렇지 않았습니다. 목록 요소 내의 사용자 지정 개체는 올바르게 작동합니다. 어댑터에 항목을 추가하면 onItemClickListener 이벤트가 중단됩니다.
어댑터의 getView
:public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if(convertView == null)
{
convertView = View.inflate(this.context, R.layout.company_listing, null);
Log.d(Cloud.DEBUG_TAG, "Inflating View...");
holder = new ViewHolder(convertView, context);
convertView.setTag(holder);
}
else
{
holder = (ViewHolder) convertView.getTag();
}
holder.populateFrom(companies.get(position),logoDown);
return convertView;
}
ViewHolder : 어디에 문제가
class ViewHolder{
ImageView theLogo;
TextView textName;
ImageView webButton;
ImageView phoneButton;
ImageView favoriteButton;
Context context;
Company currentCompany;
public ViewHolder(View row, Context context){
theLogo = (ImageView) row.findViewById(R.id.imageLogo);
textName = (TextView) row.findViewById(R.id.textName);
webButton = (ImageView) row.findViewById(R.id.imageWeb);
phoneButton = (ImageView) row.findViewById(R.id.imagePhone);
favoriteButton = (ImageView) row.findViewById(R.id.imageStar);
theLogo.setImageResource(R.drawable.no_pic);
this.context = context;
}
public void setIcon(Bitmap icon)
{
try {
if(icon == null) {
theLogo.setImageResource(R.drawable.no_pic);
} else {
theLogo.setImageBitmap(icon);
}
} catch(Exception e) {}
}
public void populateFrom(Company oneCompany,CachedLogoDownloader logos){
currentCompany = oneCompany;
Bitmap tIcon = logos.getLogo(this);
try {
if(tIcon == null) {
theLogo.setImageResource(R.drawable.no_pic);
} else {
theLogo.setImageBitmap(tIcon);
}
} catch(Exception e) {}
//create listener for favorite star icon thingy
favoriteButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//...code removed...
}
});
//set company name
textName.setText(currentCompany.getName());
//resolve web button visibility
if(!currentCompany.getWeb().equals("")) {
webButton.setVisibility(View.VISIBLE);
webButton.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
//...code removed...
}
});
}
else {
webButton.setVisibility(View.GONE);
}
//resolve phone button visibility
if(!currentCompany.getPhone().equals("")) {
phoneButton.setVisibility(View.VISIBLE);
phoneButton.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
//...code removed...
}
});
}
else {
phoneButton.setVisibility(View.GONE);
}
}}}
내 컴퓨터에는 아직 없지만 새로운 요소를 추가하기 전에 작동한다는 사실을 설명하지는 않습니까? 사용자 정의 요소는 여전히 올바르게 작동합니다. 즐겨 찾기 단추가 작동하고 아이콘이 계속 업데이트됩니다. 목록 항목을 클릭 할 수 없습니다. – Nyth
방금 시도했습니다. 전혀 효과가없는 것처럼 보였습니다. – Nyth
로그를 추가하여 setOnClickListener가 설정되었는지 확인하고 트리거 된 경우 내부를 봅니다. onClick 메서드 내부의 무언가가 잘못되었을 수도 있습니다. 코드가 보이기 때문입니다. –