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

359
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
Ограничить количество потоков

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

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

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

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

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

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

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

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

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

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

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

309