1

I want to create a listview and it's item like this: I can not post images, i am sorry . This is the image :

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

click the download button it will download the file ,and what i want to do is ,when the download completed , it want to set the button's text to "Use It". Please help , i have no idea to do that. This is my Adapter :

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;

    }
}

and i have a Handler to handler the message when download complete.

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;
        }
    }
};

I am from China . I'm sorry for my English.Please help ,thanks.

Houny Chang
  • 120
  • 2
  • 6

2 Answers2

0

Keep the downloaded items positions some where in a List and after finishing the download functionality, call adapter.notifyDataSetChanged() to reload the adapter view. in this, set button title by checking the downloaded positions in the list.

Jithu
  • 1,478
  • 1
  • 13
  • 21
0

Add a variable to your SaveModel to store this state. When the download finish, change the value in the item of the list and call notifySetDataChanged(). In the SaveListAdapter, set the button text in function of this value.

adboco
  • 2,840
  • 1
  • 21
  • 21
  • Thanks a lot.Your answer is extremely useful.I fixed it.But I want to know how about i put a progressbar in each item ? How could I asyn update the progressbar , like in Google Play click "Update All". – Houny Chang Jun 23 '14 at 02:18