我的活动中有超过30个观看次数。每一个都是一个RelativeLayout,它有嵌套的ImageView和一些TextViews(其中一些是静态的,其中一些是可变的)。重构为以编程方式显示结果,如下所示:
tbnImages = db.getTbnImages();
tbnNames = db.getTbnNames();
tbnExts = db.getTbnExts();
tbnDescs = db.getTbnDescs();
vf = (ViewFlipper) findViewById(R.id.viewFlipperTbnImages);
vf.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.left_in));
vf.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.left_out));
detector = new SimpleGestureFilter(this, this);
tbnImage = (ImageView) findViewById(R.id.tbnImage);
tbnName = (TextView) findViewById(R.id.tbnName);
tbnExt = (TextView) findViewById(R.id.tbnExt);
tbnDesc = (TextView) findViewById(R.id.tbnDesc);
我应该如何配置我的ViewFlipper,以便.showNext()
和.showPrevious()
方法显示正确的视图,包括在最后一个视图上启动方法时的正确行为(.showNext()
重定向到第一个视图)和第一个(.showPrevious()
显示最后一个视图)?
public void onSwipe(int direction) {
switch (direction) {
case SimpleGestureFilter.SWIPE_RIGHT:
vf.showPrevious();
break;
case SimpleGestureFilter.SWIPE_LEFT:
vf.showNext();
break;
}
所有变量(ImageView图片和TextView文本)都取自ArrayList。如何将它们设置为ViewFlipper孩子?
答案 0 :(得分:2)
您需要生成所有30个视图,并将它们添加为ViewFlipper的子视图。如果您的所有视图共享一个布局,则应创建一个自定义视图来处理它。
public class CustomView extends RelativeLayout{
public CustomView(Context context, Uri imageUri, String tbnName, String tbnDescripton, String tbnDesc) {
super(context);
LayoutInflater.from(context).inflate(R.layout.your_layout_resource, this, true);
ImageView tbnImage = (ImageView) findViewById(R.id.tbnImage);
TextView tbnName = (TextView) findViewById(R.id.tbnName);
TextView tbnExt = (TextView) findViewById(R.id.tbnExt);
TextView tbnDesc = (TextView) findViewById(R.id.tbnDesc);
tbnImage.setImageURI(imageUri);
tbnName.setText(tbnName);
tbnImage.setText(tbnDescription);
tbnExt.setText(tbnDesc);
}
}
其中'your_layout_resource'是您当前的RelativeLayout资源,其中'merge'元素为根。然后,您只需创建所需的所有视图,并将它们添加到ViewFlipper:
for(int i = 0; i<tbnImages.size(); i++){
vf.addView(new CustomView(context,
tbnImages.get(i),
tbnNames.get(i),
tbnDescripton.get(i),
tbnDescs.get(i)));
}
无论如何,30个观点是很多观点。您确定ViewPager不适合您吗?