2014-06-20 2 views
1

Я хочу создать список, и вот такой вот элемент: Я не могу публиковать изображения, извините. Это изображение:Как обновить текст кнопки в каждом элементе списка (Android)

https://lh3.googleusercontent.com/-tQ0Uh8-YhkE/U6Qsz9Y0FAI/AAAAAAAADPc/dDerCtq_6jQ/w487-h865-no/Screenshot_2014-06-20-20-40-07.png

нажмите кнопку скачать скачает файл, и то, что я хочу сделать это, когда загрузка завершена, она хочет, чтобы установить текст кнопки на «Use It». Пожалуйста, помогите, я не знаю, как это сделать. Это мой адаптер:

class SaveListAdapter extends BaseAdapter { 
    private List<SaveModel> savesList; 
    private Context context; 

    public SaveListAdapter(Context context) { 

     this.context = context; 
    } 

    public void addItem(SaveModel model) { 
     if (null != savesList && !savesList.contains(model)) { 
      this.savesList.add(savesList.size(), model); 
     } else if (null == savesList) { 
      this.savesList = new ArrayList<SaveModel>(); 
      this.savesList.add(model); 
     } 
    } 

    public void addItems(List<SaveModel> modelList) { 
     if (null != savesList) { 
      Iterator<SaveModel> listIterator = modelList.iterator(); 
      while (listIterator.hasNext()) { 
       SaveModel model = listIterator.next(); 
       addItem(model); 
      } 
     } else { 
      this.savesList = modelList; 
     } 
    } 

    @Override 
    public int getCount() { 
     if (null != savesList) { 
      return savesList.size(); 
     } else 
      return 0; 
    } 

    public void removeAllItems() { 
     if (null != this.savesList) { 
      this.savesList.clear(); 
     } 
    } 

    @Override 
    public SaveModel getItem(int position) { 
     if (null != savesList) 
      return savesList.get(position); 
     else 
      return null; 
    } 

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

    @Override 
    public View getView(final int position, View convertView, 
      ViewGroup parent) { 
     final SaveModel model = savesList.get(position); 
     final ViewHolder viewHolder; 
     if (null == convertView) { 
      viewHolder = new ViewHolder(); 
      convertView = LayoutInflater.from(context).inflate(
        R.layout.item_card, null); 
      viewHolder.gamePicIMG = (ImageView) convertView 
        .findViewById(R.id.item_card_save_pic_Image); 
      viewHolder.saveTitleTV = (TextView) convertView 
        .findViewById(R.id.item_card_save_title_TV); 
      viewHolder.saveDownloadBtn = (Button) convertView 
        .findViewById(R.id.item_card_save_download_Btn); 
      viewHolder.saveDescTV = (TextView) convertView 
        .findViewById(R.id.item_card_save_desc_TV); 
      viewHolder.saveAuthorTV = (TextView) convertView 
        .findViewById(R.id.item_card_save_author_TV); 
      viewHolder.saveUpdateTimeTV = (TextView) convertView 
        .findViewById(R.id.item_card_save_update_time_TV); 
      convertView.setTag(viewHolder); 

     } else { 
      viewHolder = (ViewHolder) convertView.getTag(); 
     } 

     if (!TextUtils.isEmpty(model.getSaveTitle())) { 
      viewHolder.saveTitleTV.setText(model.getSaveTitle()); 
     } else { 
      viewHolder.saveTitleTV.setText("UnKonw"); 
     } 
     viewHolder.saveDescTV.setText("Description:\n" + model.getSaveDesc()); 
     if (!TextUtils.isEmpty(model.getSaveAuthor())) { 
      viewHolder.saveAuthorTV.setText(model.getSaveAuthor()); 
     } else { 
      viewHolder.saveAuthorTV.setText("Someone"); 
     } 

     viewHolder.saveUpdateTimeTV.setText("Sometime"); 

     viewHolder.saveDownloadBtn.setText("Download "); 
     viewHolder.saveDownloadBtn 
       .setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         showDialog("Download", "Downloading..."); 
         Message msg = new Message(); 
         msg.what=Constants.MSG_DOWNLOAD_COMPLETE; 
         handler.sendMessageDelayed(msg, 5000); 
        } 
       }); 

     return convertView; 
    } 

    private class ViewHolder { 
     private ImageView gamePicIMG; 
     private TextView saveTitleTV; 
     private Button saveDownloadBtn; 
     private TextView saveDescTV; 
     private TextView saveAuthorTV; 
     private TextView saveUpdateTimeTV; 

    } 
} 

и у меня есть обработчик для обработчика сообщения, когда загрузка завершена.

private Handler handler = new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
     switch (msg.what) { 
     case Constants.MSG_DOWNLOAD_COMPLETE: 
      if(null!=dialog){ 
       dialog.dismiss(); 
      } 
      //TODO 怎么更新点击的按个按钮状态为“使用” how could i set "Use It" to the button which i clicked. 
      break; 
     } 
    } 
}; 

Я из Китая. Прошу прощения за мой английский. Пожалуйста, помогите, спасибо.

+0

см. Http://stackoverflow.com/questions/3851507/android-widget-how-to-change-the-text-of-a-button –

ответ

0

Добавьте переменную в свой SaveModel, чтобы сохранить это состояние. Когда закончите загрузку, измените значение в элементе списка и вызовите notifySetDataChanged(). В SaveListAdapter установите текст кнопки в функции этого значения.

+0

Большое спасибо. Ваш ответ чрезвычайно полезен. Я исправил его. Но я хочу знать, как я могу добавить индикатор прогресса в каждый элемент? Как я могу обновить прогресс в asyn, как в Google Play, нажмите «Обновить все». –

0

Сохраняйте загруженные позиции позиций, где в List и после завершения загрузки загрузите функцию adapter.notifyDataSetChanged(), чтобы перезагрузить вид адаптера. в этом, установите название кнопки, проверив загруженные позиции в списке.

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