在使用ViewFlipper的时候,其实没必要给每个子view都添加点击事件,查看方法ViewFlipper.getDisplayedChild()得知,该方法能获取当前展示的view的索引值,返回int类型。很显然,如果能获取到这个值,就能折中实现了每个子view的点击监听的功能。
mViewFlipper.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Logger.t(TAG).i(mViewFlipper.getDisplayedChild() + "");
}
});
为ViewFlipper添加子view需要注意添加的时机:
一般的做法都是在代码中动态给ViewFlipper添加子view:
for (int i = 0; i < 3; i++) {
ImageView imageView = new ImageView(this);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
ImageLoader.getInstance().displayImage(urls.get(i), imageView, AppApplication.mOptions);
mViewFlipper.addView(imageView);
}
比如说这里添加了3个子View,这里就有一个问题了,如果这段代码是在onResume()中调用了的,那么,如果这个Activity或者Fragment进入onPause()生命周期之后,再重新进入onResume()回调,这时候会再次调用这段代码继续为ViewFlipper添加子view,这时候,就会有6个子view存在。那么,上面所述的监听回调中返回的数值可能会影响到每个子view监听功能的实现。当然,你可以利用取余的方法去进行返回的数值转换,但尽量不要这么做。
为了避免这种情况的发生,要清楚Activity和Fragment的生命周期,要避免在onResume()或者onStart()方法中进行添加。或者,在onPause()方法中调用removeAllViews()方法先移除掉所有的子view。