我的主要 Activity 中有以下内容用于登录 TextView 元素
public synchronized void log(String msg) {
TextView t=(TextView)findViewById(R.id.log);
t.append(msg + "\n");
}
我还有以下回调函数来处理 NFC 标签:
@Override
public void onTagDiscovered(Tag tag) {
log("NEW TAG!");
}
当在我的主要 Activity 中使用 log()
时,它会按预期工作。但是当回调尝试使用它时,它不会记录数据,之后 TextView 不再更新正常日志。我猜这是因为 onTagDiscovered()
是从不同的线程调用的。我怎样才能让它正常工作?
最佳答案
您必须使用处理程序从主线程修改 View 。
类似这样的事情:
private Handler handler;
public void onCreate(...) {
(...)
handler = new Handler(); // Initialize the Handler from the Main Thread
}
(...)
@Override
public void onTagDiscovered(Tag tag) {
handler.post( () -> log("NEW TAG!") );
}
或者,如果您不想/不能使用 Java 1.8 Lambda 表示法
@Override
public void onTagDiscovered(Tag tag) {
handler.post( new Runnable() {
public void run() {
log("NEW TAG!");
}
} );
}
关于android - 从回调更新 Android TextView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37384812/