2012-03-05 6 views
1

Когда я использую notifyDataSetChanged в listview, onClick прослушиватель отвечает только пару раз. после этого прослушиватель onClick не работает.Android listview onClick не работает

Я предполагаю, что когда listitem is notifyDataSetChanged, некоторые chaches остались бы.

Скажите, пожалуйста, как это исправить.

коды ниже:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    ViewHolder holder; 
    if (convertView == null) { 
     holder = new ViewHolder(); 
     convertView = mInflater.inflate(R.layout.list_row, null); 
     holder.mIconImg = customFindViewById(convertView, R.id.icon_img); 
     holder.mTitleText = customFindViewById(convertView, R.id.item_title_text); 
     holder.mDescText = customFindViewById(convertView, R.id.item_descr_text); 
     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    HashMap<IField, Object> item = getItem(position); 
    String imageUrl = getHashmap(item, ItemField.ICON_URL); 
    Drawable image = ImageCache.getImage(imageUrl); 
    if (image == null) { 
     ImageDownloadTask task = new ImageDownloadTask(holder.mIconImg, null, null); 

     holder.mIconImg.setImageResource(R.drawable.error_ic); 

     try { 
      task.execute(Utility.getHashmap(item, ItemField.ICON_URL)); 
     } catch (RejectedExecutionException e) { 
      e.printStackTrace(); 
     } 
    } else { 
     holder.mIconImg.setImageDrawable(image); 

    } 
    String title = getHashmap(item, ItemField.CATEGORY_LIST_TEXT); 
    holder.mTitleText.setText(title); 
    this.notifyDataSetChanged(); 
    mItemList.get(position); 

    // convertView.getFocusables(position); 
    // convertView.clearFocus(); 
    convertView.setEnabled(true); 
    return convertView; 

} 
+1

В этом коде не похоже на clickListener. Либо вам нужно переформулировать свой вопрос немного более четко, либо вы разместили код, который, похоже, не очень уместен. – FoamyGuy

+0

Как уже упоминалось, ваш код не имеет ничего общего с clickListener. Вы просто показываете, как вы заполняете каждую строку своего списка. –

+0

Кроме того, обычно используется setOnItemClickListener вместо setOnClickListener при работе с ListViews. – Shellum

ответ

1

Я уверен, что вы не должны называть this.notifyDataSetChanged() в методе getView(). Это также, вероятно, не делает ничего полезного.

+0

Спасибо за это. setOnItemClickListener работают очень хорошо. – user818992

+0

, но изображение иконки в виде списка часто переключается на другое изображение значка много раз. – user818992

+0

Подождите, вы имеете в виду, что изображение не обновляется после его загрузки? Тогда ваш дизайн ошибочен. Вам нужен механизм «уведомлений», который позволит вам узнать, когда было загружено изображение, которое затем обновляет «ImageView». Не имеет смысла * вообще * вызывать 'notifyDataSetChanged()', потому что набор данных на самом деле не изменился. – dmon

Смежные вопросы