Java 如何在android中每秒运行适配器中的代码
代码 目前,我正在努力实现像这样的目标。。。但似乎没有发生。。。我只有在刷新活动后才能获得所需的结果。。。我想让runnable中的代码每一秒钟执行一次。。。我的方法正确吗?请帮忙。。。提前谢谢 试液Java 如何在android中每秒运行适配器中的代码,java,android,database,firebase,firebase-realtime-database,Java,Android,Database,Firebase,Firebase Realtime Database,代码 目前,我正在努力实现像这样的目标。。。但似乎没有发生。。。我只有在刷新活动后才能获得所需的结果。。。我想让runnable中的代码每一秒钟执行一次。。。我的方法正确吗?请帮忙。。。提前谢谢 试液 @Override public void onBindViewHolder(final MessageViewHolder holder, int position) { String current_user_id = mAuth.getInstance().getCurrentU
@Override
public void onBindViewHolder(final MessageViewHolder holder, int position) {
String current_user_id = mAuth.getInstance().getCurrentUser().getUid();
Messages messages = mMessagesList.get(position);
String from_user = messages.getFrom();
if (from_user != null && from_user.equals(current_user_id)) {
holder.messageText.setTextColor(Color.BLACK);
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) holder.messageText.getLayoutParams();
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
holder.messageText.setLayoutParams(params);
final Handler handler = new Handler();
final int delay = 1000; //milliseconds
final long Seen = messages.isSeen();
handler.postDelayed(new Runnable(){
public void run(){
if (Seen==1){
holder.messageText.setBackgroundResource(R.drawable.text_background2);
}else{
holder.messageText.setBackgroundResource(R.drawable.text_background1);
}
}
}, delay);
}else {
holder.messageText.setBackgroundResource(R.drawable.text_background2);
holder.messageText.setTextColor(Color.BLACK);
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) holder.messageText.getLayoutParams();
params.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
holder.messageText.setLayoutParams(params);
}
holder.messageText.setText(messages.getMessage());
}
试试这个
messageList = (RecyclerView) findViewById(R.id.message_list);
linearLayoutManager = new LinearLayoutManager(getApplicationContext());
mAdapter = new AdapterMessages(messagesList);
messageList.setHasFixedSize(true);
messageList.setLayoutManager(linearLayoutManager);
messageList.setAdapter(mAdapter);
final Handler handlerr = new Handler();
int delay = 1000; //milliseconds
final int finalDelay1 = delay;
handlerr.postDelayed(new Runnable() {
public void run() {
mAdapter.notifyDataSetChanged();
handlerr.postDelayed(this, finalDelay1);
}
}, delay);
或者试试计时器
private Handler handler = new Handler();
private Runnable runnable = new Runnable() {
@Override
public void run() {
yourfunction();
handler.postDelayed(this, 1000);
}
};
//Start
handler.postDelayed(runnable, 1000);
在活动或片段内部,您需要创建如下处理程序 注意:从“onBindViewHolder”适配器中删除与处理程序相关的代码,您只需要通知您的适配器 (1) 创建处理程序和可运行类
//Declare the timer
Timer t = new Timer();
//Set the schedule function and rate
t.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
//Called each time when 1000 milliseconds (1 second) (the period
parameter)
}
},
//Set how long before to start calling the TimerTask (in milliseconds)
0,
//Set the amount of time between each execution (in milliseconds)
1000);
(2) 像启动处理器一样启动
public static final int TIME=1000;
private Handler handler = new Handler();
private Runnable runnable = new Runnable() {
@Override
public void run() {
//Notify your recyclerview adapter here
handler.postDelayed(this, TIME);
}
};
每次你向上/向下滚动recyclerview时,适配器onBindViewHolder中写入的代码都将执行。我希望它每秒钟都执行一次尝试使用计时器这将帮助你熟悉这种方法。。。我应该把代码放在哪里还是什么都没有,,,顺便问一下,适配器在哪里?我可以知道你是如何调用适配器的,在哪个文件中调用适配器的吗?我正在一个名为chat的活动中调用适配器。。。但我无法从活动中更改视图的背景,,,只能在适配器内完成,但在我刷新它之前不会发生…我已编辑了您的问题代码请检查适配器代码,如果仍有疑问,请告诉我该如何解决问题?你只是把代码缩短了
handler.postDelayed(runnable, TIME);