为什么Android中的变量在点击按钮时重置



有人能帮我了解这里发生了什么吗?一直在尝试调试,但感觉被卡住了!

我正在尝试使用以下方法在我的Android应用程序中制作一些在线图像的动画。

private void animateImages() {

// URL loading
// int i = 1; (initialized earlier)
// ArrayList<String> myImages = new ArrayList<>(); (initialized earlier)
myImages.clear();
While (i < 11) {
// Adds ten images using web link
myImages.add("My_web_url");
i++;
}            
AccelerateInterpolator adi = new AccelerateInterpolator();
try {
Field mScroller = ViewPager.class.getDeclaredField("mScroller");
mScroller.setAccessible(true);
mScroller.set(viewPager, new MyScroller(getApplicationContext(), adi, 1));
}
catch (NoSuchFieldException e) {
e.printStackTrace();
}
catch (IllegalAccessException e) {
e.printStackTrace();
}

if (viewPager != null) {
viewPager.setAdapter(new MyPageAdapter(getApplicationContext(), myImages));
}

final Handler handler = new Handler();
final Runnable Update = new Runnable() {
// Printing variables for debugging 
System.out.println("The page number is=" + currentPage);
System.out.println("The myImages size is=" + myImages.size());

public void run() {
if (currentPage == myImages.size() - 1) {
currentPage = 0;
}
viewPager.setCurrentItem(currentPage++, true);
}
};

timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
handler.post(Update);
}
// delay and period can be initialized as desired
}, delay, period);
}

}

当我在OnCreate中调用此方法时,动画效果良好。然而,当我在OnClickButton Listener中调用此方法时,变量myImages大小(在public void run()之前(变为零,并且由于此动画而不起作用。

在上面的例子中,MySCrollerMyPageAdapeter是java类。但是,最有可能的是,这个问题与按钮点击有关,我不明白为什么它会重置myImages的大小,从而停止动画!

这就是按钮点击监听器的调用方式。我做错了什么?

MyButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
animateImages();
}
});

编辑1:

感谢所有的评论,我取得了一点进步。

我将所有这些变量从MainActivity移到animateImages((方法中。动画运行时也会单击按钮,但动画中有一个凸起,过多的图像移动过快,然后凸起等等。

// Added just before while loop
DELAY_MS = 1000;
PERIOD_MS = 1000;
i = 1;
currentPage = 0;

如果我在循环到OnCreate()时移动URL加载,我会注意到相同的动画凹凸。

第二次调用animateImages时,它会清除myImages,但不会循环,因为i没有重置,因此它保持为空。将该列表的创建移至onCreate以避免该问题。

最新更新