Как держать контроль над обработчиками? - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть три макета с изображениями внутри. Когда я нажимаю кнопку «Пуск», представления изображений начинают менять свой ресурс изображения один за другим до 6. Например, если я дважды нажимал кнопку «Пуск», два изображения меняют свой ресурс изображения. Также, если я нажимаю на изображение, это должно остановить процесс изменения изображения, и у меня есть проблемы в этой части. Я написал следующий код:

startButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                final int index[];
                index = getindex();
                Runnable run = new Runnable() {
                    @Override
                    public void run() {
                        Log.d(tag, "New runnable: on " + index[0] + " " + index [1]);
                        displayFlags(index[0],index[1]);
                    }
                };
                handler.post(run);
            }
        });

Затем я создаю runnables для просмотра изображений, когда я нажимаю кнопку запуска. Метод getIndex () предназначен для получения индекса imageView в linearLayout. Кроме того, я написал следующий метод для displayFlags:

private void displayFlags(int pRow, int pColumn) {
final int row = pRow;
final int column = pColumn;

final ArrayList<Drawable> drawablesList = new ArrayList<>();


//Here is basically for get an image resources.
AssetManager assets = getAssets();
        for (int i = 0; i < 6; i ++) {
                String nextImage = countriesList.remove(0);
                String region = nextImage.substring(0, nextImage.indexOf('-'));
                try (InputStream stream =
                             assets.open(region + "/" + nextImage + ".png")) {
                    drawablesList.add( Drawable.createFromStream(stream, nextImage));
                }
                catch (IOException exception) {
                    Log.e(tag, "Error loading " + nextImage, exception);
                }
            }
//here I have problems, I think
Runnable runnable = new Runnable() {
    int i = 0;
    ImageView imageView =  (ImageView) rowsLinearLayouts[row].getChildAt(column);

    public void run() {
        if(startButtonState == false) {
            Log.d(tag, "New runnable On: " + row + " " + column );
            imageView.setVisibility(View.VISIBLE);
            imageView.setImageDrawable(drawablesList.get(i));
            i++;
            handler.postDelayed(this, 1000);
            if (i == 6) {
                imageView.setVisibility(View.INVISIBLE);
                handler.removeCallbacks(this);
                if(requestsExceeded == true){
                    requestsExceeded = false;
                    startButton.setEnabled(true);
                }
            }
        } else if (startButtonState == true){
            Log.d(tag, "Delete runnable on: " + row + " " + column);
            handler.removeCallbacks(this);
            imageView.setVisibility(View.INVISIBLE);
            startButtonState = false;
            startButton.setEnabled(true);
            requestsExceeded = false;

        }
    }
};

startButtonState - флаг для отмены запускаемого объекта. Когда я нажимаю на просмотр изображения, я изменяю флаг в true, поэтому теоретически работоспособность должна быть отменена, но она отменяет другие запускаемые рисунки. Вот слушатель для просмотра изображений.

   private View.OnClickListener guessImageViewListener = new View.OnClickListener(){
        @Override
        public void onClick(View view) {
                startButtonState = true;

        }
    };

Тогда проблема в том, что когда я нажимаю на просмотр изображений, другой просмотр изображений, который находится в другом индексе, останавливает процесс отображения изображений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...