在Gridview中更新进度条

时间:2015-06-18 04:23:00

标签: android android-mediaplayer android-gridview android-progressbar

我有AudioListFile玩家计划。 当我点击GridView的项目时,将播放声音。 enter image description here

现在,我想知道,如何更新ProgressBar中的GridView? 我在适配器中需要mediaplayer.getDuration()。 请帮我。非常感谢。 我的适配器:

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

    if (convertView == null) {

        // Initialize views
        holder = new Holder();
        convertView = inflater.inflate(R.layout.raw_audio_list_item, null);
        holder.tvFileName = (TextView) convertView.findViewById(R.id.row_audio_list_item_tv_file_name);
        holder.tvFileSize = (TextView) convertView.findViewById(R.id.row_audio_list_item_tv_file_size);
        holder.pbPlayProgress = (ProgressBar) convertView.findViewById(R.id.audio_file_list_pb);

        convertView.setTag(holder);


    } else {

        holder = (Holder) convertView.getTag();


    }

    // get the map object from list
    AudioDataModel audioFileModel = audioFileList.get(position);

    // set data to view
    holder.tvFileName.setText(audioFileModel.getFileName());
    holder.tvFileSize.setText(audioFileModel.getFileSize());
    holder.pbPlayProgress.setMax(Integer.parseInt(audioFileModel.getFileDuration()));

    convertView.setId(Integer.valueOf(audioFileModel.getFileId()));

    return convertView;
}

1 个答案:

答案 0 :(得分:1)

实际上您可以轻松地执行此操作,但您必须使用sparseIntegerHashmap来跟踪特定视图的当前进度,因为gridview或listview会回收视图,它们会重复使用视图以提高效率。所以首先检查getview方法检查这个特定的视图是否适用于这个特定的进度条(意味着它没有被重用)然后从hashmap设置它的值,如果这个视图是新创建的(那么在hashmap中找不到条目)请申请进度条的默认值。很简单,您必须跟踪散列图中的进度来跟踪单个视图。当前代码可能无法正常工作,因为我现在不在我的工作站上,希望您能理解,例如

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

    if (convertView == null) {

        // Initialize views
        holder = new Holder();
        convertView = inflater.inflate(R.layout.raw_audio_list_item, null);
        holder.tvFileName = (TextView) convertView.findViewById(R.id.row_audio_list_item_tv_file_name);
        holder.tvFileSize = (TextView) convertView.findViewById(R.id.row_audio_list_item_tv_file_size);
        holder.pbPlayProgress = (ProgressBar) convertView.findViewById(R.id.audio_file_list_pb);

        convertView.setTag(holder);


    } else {

        holder = (Holder) convertView.getTag();


    }

    // get the map object from list
    AudioDataModel audioFileModel = audioFileList.get(position);

    // set data to view
    holder.tvFileName.setText(audioFileModel.getFileName());
    holder.tvFileSize.setText(audioFileModel.getFileSize());    holder.pbPlayProgress.setMax(Integer.parseInt(audioFileModel.getFileDuration()));

    convertView.setId(Integer.valueOf(audioFileModel.getFileId()));
      //your unique id for compare  
     if(map.get(audioFileModel.getFileId())==holder.getId) {
             holder.pbPlayProgress.setProgress(map.get(audioFileModel.getFileId()));
     } else {
      holder.pbPlayProgress.setProgress(//add default value );
      // also add entry in hashmap 
       map.add(audioFileModel.getFileId(),default value)
     }
    return convertView;
}