使用图库在视图之间滑动

时间:2010-07-15 20:57:50

标签: android gallery

我正在关注Android图库教程(http://developer.android.com/guide/tutorials/views/hello-gallery.html),但我希望能够横向移动到一个完整的新屏幕,而不是简单的图像。一个LinearLayout。这个想法是一种标签行为,但用户可以通过屏幕滑动。

我创建了一个库,创建了一个从BaseAdapter扩展的GalleryAdapter,在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)

感谢名单 斯文

2 个答案:

答案 0 :(得分:2)

那是因为a)不是你获得ScrollView和b)的方式,而不是你应该实现getView的方式。你看到了这个例外,因为getLayout正在返回XmlResourceParser而不是ScrollView。做你想要的你需要的东西:

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

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

这将为您提供布局inflater的参考。

getView

View view = inflater.inflate(R.layout.main, parent, false);
return view;

在layout_main中,您应该将所有内容都包装在ScrollView中,因为整个布局都要充气。

答案 1 :(得分:0)

我觉得它与你的布局有关。如果您只是加载一个空活动并将布局设置为该怎么办?你的布局是什么样的。