2010-07-15 7 views
3

Я следую руководству Android Gallery (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 Sven

ответ

2

Это потому, что а) это не то, как вы получаете 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, поскольку вся планировка надувают.

0

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

Смежные вопросы