ViewHolder的逻辑onBindViewHoleder()方法?

时间:2016-05-16 15:21:08

标签: java android recycler-adapter android-viewholder

我可能拥有自己的课程&#34; Torrent&#34;其中包含有关我在专用PC上下载uTorrent的一些数据。 ArrayList<Torrent> torrents每秒都在后台更新。 所以,我有一个像已知模式的RecyclerView.Adapter。 请解释一下,为什么此代码运行正常:

@Override
public void onBindViewHolder(final MyViewHolder holder,int position){
    ...
    // Update ETA textView
    holder.tvEta.setText(String.format(Locale.getDefault(),"%d h %d min %d s",torrents.get(position).getEta()/3600,(torrents.get(position).getEta()%3600)/60,torrents.get(position).getEta()%60));
    ...
}

但在这种情况下不工作?它只是在开始时更新第一个值而不是更改更多:

@Override
public void onBindViewHolder(final MyViewHolder holder,int position){
    ...
        // Update ETA textView
        int secs = torrents.get(position).getEta();
        int hours = secs / 3600;
        int minutes = (secs % 3600) / 60;
        int seconds = secs % 60;
        holder.tvEta.setText(Locale.getDefault(), String.format("%d h %d min %d s", hours, minutes, seconds));
    ...
}

1 个答案:

答案 0 :(得分:0)

内部适配器编写一个方法,如下所示

 public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> implements View.OnClickListener {

 ....
 ArrayList<Torrent> torrentList;

 public void addItems(ArrayList<Torrent> torrents)
 {
 torrentList = torrents;
 notifyDataSetChanged();
 }

@Override
public int getItemCount() {
return torrentList.size();
  }
.....
.....
}

在您的主要活动中

public class MainActivity extends Activity
{
   ...
   ...
mAdapter.addItems(torrentList);
   ...
}