views:

75

answers:

2

I am following the Android Gallery tutorial (http://developer.android.com/guide/tutorials/views/hello-gallery.html) but instead of simple images I'd like to be able to horizontally move to a complete new screen, e.g. a LinearLayout. The idea is a kind of tabbing behaviour but the user can swipe though the screens.

I created a gallery, created a GalleryAdapter that extends from BaseAdapter and in the getItem() method I try to return the complex view:

@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;
}

In the above example, it will work if I am using an ImageView, but it fails once I use a more complex view like a scrollView loaded from resources.

Any idea why? The exception is:

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)

Thanx Sven

A: 

I looks like it has something to do with your layout. What happens if you just load an empty activity and set the layout to that? What does your layout look like.

CaseyB
A: 

That's because a) that's not how you get the ScrollView and b) not the way you should implement getView. You're seeing that exeception because getLayout is returning an XmlResourceParser not a ScrollView. To do what you want you need:

In your adapter's constructor you need:

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

That will give you a reference to the layout inflater.

In your getView:

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

In your layout_main you should wrap everything in a ScrollView since the entire layout is being inflated.

Qberticus