2015-05-14 1 views
1

Я работаю над проектом. В моем проекте, когда пользователь нажимает на элемент списка, он загружает файл из некоторого источника и сохраняет его во внутреннем хранилище.Показать изображение в listview, если файл, загружаемый в файл, загружается внутренним хранилищем

Я хочу показать изображение в списках элементов listview, если файл уже загружен.

Код ниже работает нормально, но он также показывает изображение для элементов списка, чей файл еще не загружен.

Вот мой код adapter class.

package life.quran.com.quranlife; 

public class SurahBaseSearchAdapter extends BaseAdapter { 

    Context mContext; 
    LayoutInflater mInflator; 
    private List<Surah> surahList = null; 
    private ArrayList<Surah> arrayList; 
    Surah surah; 
    ArrayList<String> imgfileLocation = null; 

    String searchhighlightString = ""; 

    public SurahBaseSearchAdapter(Context context, List<Surah> list) { 

     mContext = context; 
     surahList = list; 
     mInflator = LayoutInflater.from(context); 
     arrayList = new ArrayList<Surah>(); 
     arrayList.addAll(surahList); 

    } 

    public class ViewHolder { 
     TextView sname; 
     TextView sno; 
     ImageView dlimg; 
    } 

    @Override 
    public int getCount() { 
     return surahList.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return surahList.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

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

     imgfileLocation = new ArrayList<>(); 
     surah = surahList.get(position); 
     File f = mContext.getFilesDir(); 
     String filepath = f.getAbsolutePath(); 
     File _file = new File(filepath+"/surah_"+surah.getSurah_id()+".json"); 



     final ViewHolder holder; 
     if (convertView == null) { 
      holder = new ViewHolder(); 
      convertView = mInflator.inflate(R.layout.item_template,null); 
      holder.sname = (TextView) convertView.findViewById(R.id.txt_surahName); 
      holder.sno = (TextView) convertView.findViewById(R.id.txtsuraNo); 
      holder.dlimg = convertView.findViewById(R.id.dlimg); 


      convertView.setTag(holder); 
     } 
     else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     holder.sname.setText(surah.getSurah_name()); 
     holder.sno.setText(surah.getSurah_no()); 

     if (_file.exists()) { 

      holder.dlimg.setImageResource(R.drawable.newdlimg); 
     } 


     String hSurahName = surah.getSurah_name().toLowerCase(Locale.getDefault()); 
     if(hSurahName.contains(searchhighlightString)) { 
      int startpos = hSurahName.indexOf(searchhighlightString); 
      int endpos = startpos + searchhighlightString.length(); 

      Spannable spanText = Spannable.Factory.getInstance().newSpannable(holder.sname.getText()); 
      spanText.setSpan(new ForegroundColorSpan(Color.BLUE),startpos,endpos,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

      holder.sname.setText(spanText,TextView.BufferType.SPANNABLE); 
     } 



     return convertView; 
    } 

    public void filter(String charText) { 

     searchhighlightString = charText; 


     charText = charText.toLowerCase(Locale.getDefault()); 
     surahList.clear(); 
     if(charText.length() == 0) { 
      surahList.addAll(arrayList); 
     } else { 
      for(Surah surah : arrayList) { 
       if(surah.getSurah_name().toLowerCase(Locale.getDefault()).contains(charText)) { 
        surahList.add(surah); 
       } 
      } 
     } 
     notifyDataSetChanged(); 
    } 
} 

Позвольте мне знать, если что-то неясно

ответ

1

Вы должны очистить изображение в ViewHolder после предыдущего использования. Просто измените код на что-то вроде этого:

if (_file.exists()) { 

    holder.dlimg.setImageResource(R.drawable.newdlimg); 
} else { 
    //clear image from previous usage 
    //do not sure is it legal to set null. You need to check it. 
    holder.dlimg.setImageResource(null) 
} 
2

Вам необходимо установить значение по умолчанию, если файл не существует. Добавьте еще часть к этому, если состояние, такое как

if (_file.exists()) { 
    holder.dlimg.setImageResource(R.drawable.newdlimg); 
}else{ 
    holder.dlimg.setImageResource(R.drawable.<default_image>); 
} 
+0

Я сделал это благодаря :-) –

+0

работающий после смены? если да, то ответьте. –

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

  • Нет связанных вопросов^_^