私は、2つのtextview(Name、Time)を含む項目を持つrecylerviewを持っています。毎秒実行される別のスレッドでタイマーを実行しています。 。しかし、大きなデータのために、毎秒私のarraylistデータにタイマー値を追加することはできません。アダプタに通知し、UIを更新するためにBindviewに頼ることなく、どのように私のアダプタに時間値を渡し、毎秒UIをリフレッシュするべきですか?recylerviewの値を更新する
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は1つのアイテムだけでタイマーを実行し、他のアイテムは何も表示しません。タイマーの開始と停止のアクションは、そのアイテムをクリックすることになります。 –