如果TextView中的值在最近2秒内没有改变,如何检查Android。
我有一个条件,当我的应用程序从蓝牙接收数据时,TextView中的值会不断变化。
我必须检查数据何时停止,所以基于此,我可以更新我的UI。
以下是我处理文字视图的代码
textOngoingBP.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
Logger.log(Level.DEBUG,TAG, --OnText CHanged");
}
@Override
public void afterTextChanged(Editable editable) {
// startTest and stopTest is button for start test
startTest.setVisibility(View.GONE);
stopTest.setVisibility(View.VISIBLE);
Logger.log(Level.DEBUG,TAG,"--AfterText Changed");
}
});
这里我必须使开始按钮可见,并且当没有数据到来时停止按钮消失。有什么想法吗?
答案 0 :(得分:0)
每次编辑TextView时,您都可以使用计时器并重置计时器。
试试这个:
Timer timer = new Timer();
//timer.schedule(new MyTask(),2000);
class MyTask extends TimerTask {
public void run() {
Log.i("TAG","2 seconds.");
}
}
textOngoingBP.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
//timer.cancel();
//timer = new Timer();
//timer.schedule(new MyTask(),2000);
Logger.log(Level.DEBUG,TAG, --OnText CHanged");
}
@Override
public void afterTextChanged(Editable editable) {
timer.schedule(new MyTask(),2000);
startTest.setVisibility(View.GONE);
stopTest.setVisibility(View.VISIBLE);
Logger.log(Level.DEBUG,TAG,"--AfterText CHanged");
}
}
);
答案 1 :(得分:0)
你可以拥有这样的东西,节省了上次更新的时间。
import android.content.Context;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
/**
* This class was created by Anthony M Cannon on 15/05/2018.
*/
public class ChangingTextView extends android.support.v7.widget.AppCompatTextView {
private long lastUpdated = -1;
public ChangingTextView(Context context) {
super(context);
}
public ChangingTextView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public ChangingTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public void setText(CharSequence text, BufferType type) {
lastUpdated = System.currentTimeMillis();
super.setText(text, type);
}
public long getLastUpdated() {
return lastUpdated;
}
}
然后你可以有一个后台线程,经常检查它。