2013-05-13 5 views
1

У меня есть кнопка и индикатор выполнения (невидимый) в списке. При нажатии кнопки он должен исчезнуть, и индикатор выполнения должен быть видимым и начать работу (, загрузив с веб-сервера), и когда это будет сделано с кнопкой запуска, должно появиться снова. Теперь, когда я нажимаю кнопку первого элемента, индикатор выполнения работает, но если я прокручиваю вниз, пока первый элемент не погаснет, я вижу индикатор выполнения, одновременно работающий с индикатором выполнения первого элемента в последнем элементе списка. Если я прокрутку вверх, индикаторная панель первого элемента работает нормально. Это случается так же, если я нажимаю второй элемент, второй второй элемент listview делает то же самое. В чем проблема и как я могу ее решить? Пожалуйста помоги!!!Ошибка при просмотре при прокрутке вниз

+1

Отправьте соответствующий исходный код, пожалуйста. – ozbek

+0

поделитесь своим кодом – Ishtiaq

+0

, с которым вы столкнулись, чтобы перепутать ваши записи? – Ishtiaq

ответ

0

Вы должны помнить, какие позиции загружаются, их прогресс (если вы не показываете неопределенный бар) и обновляете эти значения в getView вашего адаптера. Это действительно очень быстро усложняется: если вы хотите обновить представление еще раз, когда загрузка закончится, вы должны сделать очень очень тщательное кодирование, чтобы сделать так, как работает listviews, и как они перерабатывают представления, или вам нужно обновить весь listview всякий раз, когда файл заканчивает загрузку или обновление прогресса, что может привести к мерцанию.

0

Выберите концепцию класса viewHolder, которая сохраняет состояние списка до завершения процесса. Основная проблема Urs заключается в том, что когда u прокручивает список, просмотр получает обновление сыну только до исходного состояния.

Class ViewHolder 
{ 
TextView mtext; 
Button mButton; 
ProgressBar mBar; 
} 

В методе GetView инициализация класса viewholder

ссылки:

http://developer.android.com/training/improving-layouts/smooth-scrolling.html http://developer.android.com/training/contacts-provider/display-contact-badge.html

0

попробовать что-то вроде этого ... Я использую разные точки зрения для Pdf скачивания, но вы можете используйте эту концепцию

Holder holder; 
    class Holder { 
     TextView txt_pdfname; 
     Button btn_download; 
     ImageView img_pdficon; 
    } 

    @Override 
    public View getView(final int arg0, View arg1, ViewGroup arg2) { 


     // position=arg0; 
     View v=arg1; 
     if (v == null) { 
      holder = new Holder(); 
      v = layoutInflater.inflate(R.layout.cell_document, arg2,false); 
      holder.txt_pdfname = (TextView) v.findViewById(R.id.txt_pdfname); 
      holder.img_pdficon=(ImageView)v.findViewById(R.id.img_pdficon); 
      holder.btn_download = (Button) v.findViewById(R.id.btn_download); 
      v.setTag(holder); 

     } else{ 
      holder = (Holder) v.getTag(); 

     } 
     File pdfFile=new File(Environment.getExternalStorageDirectory().toString()+"/fpapdf/"+(pdfUrl[arg0].substring(pdfUrl[arg0].lastIndexOf('/')+1))); 
     if(pdfFile.exists()){ 
      holder.btn_download.setVisibility(View.INVISIBLE); 

     }else 
      holder.btn_download.setVisibility(View.VISIBLE); 
     holder.txt_pdfname.setText(this.pdfArray[arg0]); 
     holder.img_pdficon.setImageResource(pdfImage[arg0]); 

     holder.btn_download.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // YOUR CODE HERE 

      } 

     }); 

     return v; 
    } 

для получения дополнительной информации см this by Romain

+0

это точно, как я это сделал. Но я все еще сталкиваюсь с проблемой. – casper

0

просто заменить GetView с этим, я удалением, если (вид == NULL) этим вы будете получать каждый раз новый вид еще чем из тега

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
final ArrayList<String> array=JournalArray.get(position); 
final ViewHolder view; 
LayoutInflater inflator = activity.getLayoutInflater(); 

    view = new ViewHolder(); 
    convertView = inflator.inflate(R.layout.familylist_item, null); 
    view.progress=(ProgressBar)convertView.findViewById(R.id.downprogress); 
    view.txtViewTitle = (TextView) convertView.findViewById(R.id.text); 
    view.imgViewFlag = (ImageView) convertView.findViewById(R.id.imageView1); 
    view.imgAR=(Button)convertView.findViewById(R.id.imageAR); 
    view.imgAR.setTag(view); 
    view.imgDown=(Button)convertView.findViewById(R.id.imageDown); 
    view.imgDown.setTag(view); 
    view.imgPDF=(Button)convertView.findViewById(R.id.imagePDF); 
    view.imgPDF.setTag(view); 
    view.progress=(ProgressBar)convertView.findViewById(R.id.downprogress); 
    view.btnDel=(Button)convertView.findViewById(R.id.btnDel); 
    view.btnDel.setTag(view); 
    convertView.setTag(view); 
} 
+0

Я пробовал, но все равно сталкивается с той же проблемой – casper

+0

Вы пытались после переустановки? – Ishtiaq

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