Использование галереи для прокрутки между представлениями - PullRequest
3 голосов
/ 16 июля 2010

Я следую учебному пособию по галерее 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)

Thanx Свен

Ответы [ 2 ]

2 голосов
/ 16 июля 2010

Это потому, что а) это не так, как вы получаете ScrollView и б) не так, как вы должны реализовать getView.Вы видите это исключение, потому что getLayout возвращает XmlResourceParser, а не ScrollView.Чтобы сделать то, что вам нужно, вам нужно:

В конструкторе вашего адаптера вам нужно:

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

Это даст вам ссылку на инфлятор.1013 *:

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

В вашем layout_main вы должны обернуть все в ScrollView, так как весь макет раздувается.

0 голосов
/ 16 июля 2010

Похоже, это как-то связано с вашим макетом.Что произойдет, если вы просто загрузите пустое мероприятие и установите для него макет?Как выглядит ваш макет.

...