Многократное нажатие на кнопку

365
08 июля 2017, 08:14

По нажатию на кнопку делается обработка файла. Необходимо при нажатии на нее еще раз, остановить обработку. Получаю ошибку:

The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. Make sure your adapter calls notifyDataSetChanged() when its content changes.

AsyncTask:

public class myTask extends AsyncTask<Void, Void, Void> {
    private myTaskListener listener;
    private ArrayList<myData> data;
    public myTask (ArrayList<myData> data) {
        this.data = data) 
    }
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }
    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        if(this.listener != null) this.listener.onFinish();
    }
    @Override
    protected void onCancelled() {
        super.onCancelled();
        if(this.listener != null) this.listener.onFinish();
    }
    @Override
    protected Void doInBackground(Void... voids) {
        while (!isCancelled()) {
            //Обработка файла
            this.data.add(new myData(//Добавляю данные));
        }
        return null;
    }
    public interface myTaskListener {
        void onFinish();
    }
    public void setMyTaskListener(myTaskListener listener) {
        this.listener = listener;
    }
}

onClick():

private void start() {
    if(!this.start) {
        this.start = true;
        this.img.setImageResource(R.drawable.ic_stop);
        this.text.setText(R.string.stop);
        this.myTask = new myTask(this.data);
        this.myTask.setMyTaskListener(this);
        this.myTask.execute();
    } else {
        this.img.setImageResource(R.drawable.ic_start);
        this.text.setText(R.string.start);
        this.myTask.cancel(true);
    }
}

Слушатель:

@Override
public void onFinish() {
    this.img.setImageResource(R.drawable.ic_start);
    this.text.setText(R.string.start);
    this.start = false;
    this.adapter.notifyDataSetChanged();
}

Проблема бывает то с первого клика по кнопке, то при многократном клике. Как решить проблему?

READ ALSO
Ограничить количество потоков

Ограничить количество потоков

Уважаемые знатоки!! Есть необходимость ограничить количество потоков до одного

251
Запрет переноса слов через дефис [дубликат]

Запрет переноса слов через дефис [дубликат]

На данный вопрос уже ответили:

368
Растянуть div на всю высоту родительского div

Растянуть div на всю высоту родительского div

ЗдравствуйтеЕсть три блока Div

501
height 100vh и лишние пиксели

height 100vh и лишние пиксели

При использовании height:100vh; выдает какую-то лишнюю высотудаже box-sizing:border-box; не помогает

313