使用画廊在视图之间进行滑动

3
我将跟随Android图库教程(http://developer.android.com/guide/tutorials/views/hello-gallery.html),但我希望能够水平地移动到完全新的屏幕,例如LinearLayout。这个想法有点像选项卡的行为,但用户可以通过屏幕滑动来切换屏幕。
我创建了一个图库,创建了一个GalleryAdapter,它继承自BaseAdapter,在getItem()方法中,我尝试返回复杂的视图:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    /*ImageView i = new ImageView(this.c);
    i.setImageResource(R.drawable.login);
    i.setLayoutParams(new Gallery.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
    i.setScaleType(ImageView.ScaleType.FIT_XY);
    return i;*/     

    ScrollView view = (ScrollView)this.c.getResources().getLayout(R.layout.main);
    return view;
}

在上面的示例中,如果我使用的是ImageView,则可以正常工作,但是一旦我使用一个从资源中加载的更复杂的视图,例如scrollView,则会失败。
有任何想法为什么?异常信息如下:
07-15 13:47:36.498: ERROR/AndroidRuntime(446): java.lang.ClassCastException: android.content.res.XmlBlock$Parser
07-15 13:47:36.498: ERROR/AndroidRuntime(446):     at de.flavor.myviews.GalleryAdapter.getView(GalleryAdapter.java:44)
07-15 13:47:36.498: ERROR/AndroidRuntime(446):     at android.widget.AbsSpinner.onMeasure(AbsSpinner.java:192)
07-15 13:47:36.498: ERROR/AndroidRuntime(446):     at android.view.View.measure(View.java:8171)
07-15 13:47:36.498: ERROR/AndroidRuntime(446):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
07-15 13:47:36.498: ERROR/AndroidRuntime(446):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
07-15 13:47:36.498: ERROR/AndroidRuntime(446):     at android.view.View.measure(View.java:8171)
07-15 13:47:36.498: ERROR/AndroidRuntime(446):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
07-15 13:47:36.498: ERROR/AndroidRuntime(446):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
07-15 13:47:36.498: ERROR/AndroidRuntime(446):     at android.view.View.measure(View.java:8171)
07-15 13:47:36.498: ERROR/AndroidRuntime(446):     at android.view.ViewRoot.performTraversals(ViewRoot.java:801)
07-15 13:47:36.498: ERROR/AndroidRuntime(446):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1727)

谢谢,Sven。
2个回答

2
那是因为a)这不是获取ScrollView的方式,b)也不是实现getView方法的方式。您看到此异常是因为getLayout返回的是XmlResourceParser而不是ScrollView。要实现您想要的效果,您需要:

在适配器的构造函数中,您需要:

inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

那将为您提供布局填充器的参考。
在您的getView中:
View view = inflater.inflate(R.layout.main, parent, false);
return view;

在您的layout_main中,由于整个布局都被膨胀了,您应该将所有内容都包装在一个ScrollView中。

0

看起来似乎与您的布局有关。如果您只加载一个空活动并将布局设置为该活动,会发生什么?您的布局是什么样子的?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接