开发者

How to bind object(data) and ViewHolder(listview row) in android?

开发者 https://www.devze.com 2023-01-26 01:29 出处:网络
i need a some help , executing fallowing task. can any one help to sort out this ? I have list view . each row contains

i need a some help , executing fallowing task. can any one help to sort out this ?

I have list view . each row contains

  1. Title (Textview)
  2. sub title(TextView)
  3. Progress bar
  4. progress count(TextView)
  5. Download/ Cancel(ToggleButton)

while loading adapter i passed List . from where am displaying title , subtitle for each row.

here is myadapter code , generating views for each row.

My problem is that . In run time when i entered download button, its goes to downloadQueue to download, and updates respective progress bar . But Whwn am scrolling down the listview., progress bar visible for other row instead current row where i started Downloading. Can some one tell me t, how to bind view and state object so that it wont misplace progressbar.

`

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final int pos= position;
        final StateViewHolder viewHolder;
        final State state = stateList.get(pos) ;
        if (convertView == null) {
             inflater = LayoutInflater.from(context);
            convertView = inflater.inflate(R.layout.adapter_view, null);
            TextView title = (TextView) convertView.findViewById(R.id.text);
            TextView subTitle = (TextView) convertView.findViewById(R.id.subText);
            TextView progresstext = (TextView) convertView.findViewById(R.id.progressText);
            ProgressBar progressBar = (ProgressBar) convertView.findViewById(R.id.progress);
            ImageView cancel = (ImageView) convertView.findViewB开发者_StackOverflow中文版yId(R.id.cancel);
            ImageView download = (ImageView) convertView.findViewById(R.id.download);
             viewHolder = new StateViewHolder(title, subTitle, progresstext, download, cancel, progressBar);
             hashMap.put(state, viewHolder);
             convertView.setTag(viewHolder);
             Log.i("DownloadAdapter", "InGetView");
        }else{
            viewHolder = (StateViewHolder)convertView.getTag();
        }
         state.setViewHolder(viewHolder);
        viewHolder.getDownload().setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                     viewHolder.getDownload().setVisibility(View.GONE);
                     viewHolder.getCancel().setVisibility(View.VISIBLE);
                     Log.i("DownloadAdapter", ""+state.getName());
                    DownloadQueue.addToQueue(state);
                }
            });
         viewHolder.getCancel().setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                     viewHolder.getCancel().setVisibility(View.GONE);
                     viewHolder.getDownload().setVisibility(View.VISIBLE);
                    DownloadQueue.RemoveFromQueue(state);
                }
            });

        viewHolder.getTitle().setText(state.getName());
        viewHolder.getSubTitle().setText(state.getEffective());
        return convertView;
    }
}

Thanking you, Srinivas

`


When you use a view holder to reuse your row view, then you need to explicitly set all views everytime. In other words, you need to set every element in that row including your Title, Subtitle, Progress count text view, progress bar, and download Image view toggle.

What you are seeing is when one row sets the progress bar as visible, another row may be reusing that (thus you would see the progress bar on that row too). So you need to explicitly set the progress bar to not be visible for the rows that aren't downloading.

So at the bottom of your getView method, make sure you have logic to set every view:

viewHolder.getTitle().setText(state.getName());
viewHolder.getSubTitle().setText(state.getEffective());
viewHolder.getProgressBar().setVisibility(isImageDownloading);
viewHolder.getProgressCount().setText("example");
0

精彩评论

暂无评论...
验证码 换一张
取 消