Получите от Arraylist и обновляйте Imageview периодически после некоторого интервала - PullRequest
0 голосов
/ 24 июня 2019

У меня есть один готовый arraylist (String), который содержит веб-ссылку на некоторые изображения. Теперь я хочу периодически обновлять вид изображения через некоторый интервал (скажем, 4 секунды) с помощью ссылок на изображение, используя Glide. Я сталкиваюсь с проблемой установки паузы перед обновлением изображения с новым изображением.

Мой код:

//i is the count initially set to 0. StringLink is the arraylist 
//StatusImage is the imageview


//first I set the first link from StringLink to StatusImage

Glide.with(ShowStatusPostActivity.this).setDefaultRequestOptions(placeholderRequest).load(StringLink.get(i)).into(StatusImage);



//next I try to set the next links from StringLink to StatusImage
//I try to keep one image for 4 seconds and then change it. Here I use Handler to do so

 for(; i< StringLink.size();i++ )
        {


            try{


                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        StatusImage.post(new Runnable() {
                            @Override
                            public void run() {

                                Glide.with(ShowStatusPostActivity.this).setDefaultRequestOptions(placeholderRequest).load(StringLink.get(i))
                                        .listener(new RequestListener<Drawable>() {
                                            @Override
                                            public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                                                return false;
                                            }

                                            @Override
                                            public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {



                                                return false;
                                            }
                                        })
                                        .into(StatusImage);



                            }
                        });
                    }
                }, 4000);


            }
            catch (Exception e){}




        }

Но я получаю ошибку ArrayIndexOutofBound во втором Glide.

Я не думаю, что Handler внутри цикла for - это очень хорошая идея для создания периодической природы, я также пробовал Thread.sleep, но он тоже не работал.

Есть ли что-нибудь, что я могу сделать здесь?

1 Ответ

2 голосов
/ 24 июня 2019

Я надеюсь, что следующая функция поможет. Он будет срабатывать через каждые 4 секунды, и будет отображаться всплывающее сообщение. Вы можете вызвать функцию загрузки изображений на основе счетчика I.

int i = 0;
int length = 5;
private Handler mHandler;
private Runnable mRunnable;  

public void startPeriodicFunciton() {

    mHandler = new Handler();
    mRunnable = new Runnable() {
        @Override
        public void run() {
            // Do some task on delay
            //   doTask();

            // You can add your fuction to load image here
            i++;
            if (i == length)
                i = 0;
            Toast.makeText(MainActivity.this, "value : " + i, 
Toast.LENGTH_SHORT).show();
            mHandler.postDelayed(mRunnable, 4000);

        }
    };
    mHandler.postDelayed(mRunnable, (4000));
}
...