Значение TextView изменилось за последние N секунд - PullRequest
0 голосов
/ 15 мая 2018

Как проверить в Android, не изменилось ли значение в TextView за последние 2 секунды.

У меня есть условие, что значение в TextView постоянно меняется, поскольку мое приложение получает данные из Bluetooth.

Я должен проверить, когда данные перестают поступать, поэтому на основании этого я могу обновить свой пользовательский интерфейс.

Вот мой код для обработки текстового представления

 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");
    }
});

Здесь у меня естьчтобы кнопка пуска была видна, а кнопка останова исчезла, когда данные не поступают.Есть идеи?

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

У вас может быть что-то вроде этого, которое экономит время последнего обновления.

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;
    }
}

Тогда у вас может быть фоновый поток, который проверяет его время от времени.

0 голосов
/ 15 мая 2018

Вы можете использовать Таймер и сбрасывать таймер при каждом редактировании 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");
           }
          }
        );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...