【发布时间】:2016-06-15 13:16:40
【问题描述】:
我有一个 recylerview,其项目包含两个 textview(名称,时间),我有一个在不同线程上运行的计时器,它每秒运行一次,我想更新我的 特定项目 的 Time textview 值列表。但是由于数据量大,我无法每秒在我的数组列表数据中添加计时器值。我应该如何将时间值传递给我的适配器并每秒刷新 UI 而无需在我的数组列表中传递数据、通知适配器并依赖 Bindview 来刷新 UI。
public class MyListAdapter extends RecyclerView.Adapter<MyListAdapter.ContactViewHolder>
{
public ArrayList<Users> data;
private Context context;
public MyListAdapter(ArrayList<Users> dataList, Context context)
{
this.data = dataList;
this.context = context;
}
@Override
public ContactViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
View itemView = LayoutInflater.
from(parent.getContext()).
inflate(R.layout.card_layout, parent, false);
return new ContactViewHolder(itemView);
}
@Override
public void onBindViewHolder(ContactViewHolder holder, int position)
{
Users user = data.get(position);
holder.name.setText(user.getName());
holder.time.setText("00:00");
}
@Override
public int getItemCount()
{
return this.data.size();
}
class ContactViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener
{
TextView name, time;
public ContactViewHolder(View v)
{
super(v);
name = (TextView) v.findViewById(R.id.card_layout_name_txt);
time = (TextView) v.findViewById(R.id.card_layout_time_txt);
}
}
}
recyclerView = (RecyclerView) findViewById(R.id.fragment_recyclerview);
recyclerView.setHasFixedSize(true);
recyclerView.setAdapter(adapter);
LinearLayoutManager manager=new LinearLayoutManager(context,LinearLayoutManager.VERTICAL,false);
recyclerView.setLayoutManager(manager);
myTimer = new Timer();
myTimer.schedule(new TimerTask()
{
@Override
public void run()
{
TimerMethod();
}
}, 0, 1000);
private void TimerMethod()
{
this.runOnUiThread(Timer_Tick);
}
public Runnable Timer_Tick = new Runnable()
{
public void run()
{
// want to update time in specific item in recylerview
}
};
【问题讨论】:
-
你必须在所有行中显示相同的时间还是不同的时间?
-
请检查我的答案!
-
@MalithLakshan 仅在一项中运行计时器,在其他项上没有。并且启动和停止计时器的动作将在单击该项目时进行。
标签: android data-binding android-recyclerview