Я хочу сделать recyclerView, который может отображать изменяемые в реальном времени элементы данных с помощью onClickListener.
Вот мой код: (пользовательский адаптер для RecyclerView)
public MyRecyclerAdapter(ArrayList<Procedure> procs){
this.procedures = procs;
final Handler handler = new Handler(){
public void handleMessage(Message msg){
updateList();
}
};
Timer timer = new Timer(true);
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
Message msg = handler.obtainMessage();
handler.sendMessage(msg);
}
@Override
public boolean cancel() {
return super.cancel();
}
};
timer.schedule(timerTask, 0, 1);
}
...
public void updateList(){
if(procedures != null && procedures.size()>0){
notifyDataSetChanged();
}
}
updateList () обновляет элементы представления пользовательского интерфейса каждые 1 мс. Это хорошо работает, но onClickListener, который я добавил в myRecyclerAdapter, не работает ...
После нескольких тестов, я думаю, что вызов notifyDataSetChanged () заменяет оригинальный onClickListener на новый ... потому что обычное время касания экрана больше 1 мс, поэтому оригинальный onClick () исчезает, когда я касаюсь экрана.
Как правильно добавить onClickListener к каждому элементу RecyclerView, который обновляется каждые 1 мс (в режиме реального времени)?
Установка времени обновления Период 300 мсек ~ 500 мс лучше, но я хочу видеть более быстрое обновление, поэтому помогите мне ... Я не могу найти решение нигде.
//import things...
public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.ViewHolder>{
public ArrayList<Procedure> procedures;
public Context mContext;
public MyRecyclerAdapter(ArrayList<Procedure> procs){
this.procedures = procs;
final Handler handler = new Handler(){
public void handleMessage(Message msg){
updateList();
}
};
Timer timer = new Timer(true);
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
Message msg = handler.obtainMessage();
handler.sendMessage(msg);
}
@Override
public boolean cancel() {
return super.cancel();
}
};
timer.schedule(timerTask, 0, 300);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType){
//skipped
}
@Override
public void onBindViewHolder(final ViewHolder holder, int pos){
//UI Changes (Which is actually updated)
}
public void updateList(){
if(procedures != null && procedures.size()>0){
notifyDataSetChanged();
}
}
@Override
public int getItemCount(){
return procedures.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
//Elements...
public ViewHolder(View view){
super(view);
//Settings UI elements
deleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//This listener has to be maintained even after data changed
Toast.makeText(mContext, "alert", Toast.LENGTH_LONG).show();
}
});
}
}
}