2

我的活动中有 30 多个视图要显示。每一个都是一个带有嵌套 ImageView 和一些 TextView 的 RelativeLayout(其中一些是静态的,其中一些是可变的)。重构为显示结果的编程方式,如下所示:

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 孩子?

4

1 回答 1

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' 是您当前的以 'merge' 元素为根的 RelativeLayout 资源。然后你只需要创建你需要的所有视图并将它们添加到你的 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 不适合您吗?

于 2013-09-23T21:03:25.507 回答