Thanks!

It seems it would be easy enough to do: the scrollability of a
GridView needs to be optional, so you could put it into a ListView and
it would remain full height.

There doesn't seem to be a need for each of the ListView elements to
be the same size. I just tried a work-around where I just naively put
stacked text views in a LinearLayout and, while that's ugly and
unacceptable, it does work and leads to list elements that are
different sizes.

I also tried a Spinner and that seems to work, although it shows only
the first line and when you click on it you have to select in the pop-
up list to get it to go away.

On Dec 11, 10:14 am, Romain Guy <[email protected]> wrote:
> ListView and GridView are not meant to be embedded within one another
> (the same is true with ScrollView.) And when I say they are not meant
> to, it's not supported to do so.
>
>
>
>
>
> On Fri, Dec 11, 2009 at 6:53 AM, Brion Emde <[email protected]> wrote:
> > Here's a simple program that puts a bunch of GridViews inside a
> > ListView. My original question was about how the list item that has no
> > GridView entries, or one row of entries, still has two rows. But, upon
> > further examination of the included program, the worse problem is that
> > the GridView items that have 3 rows are cut off. The ListView is not
> > giving enough space to include the entire height of the taller
> > GridView.
>
> > Sometimes the GridViews with 3 rows can be scrolled, sometimes not.
> > The intention, in my real code, is to put out a variable length list
> > in a grid fashion and it mostly works, but for the scrolling that is
> > sometimes required.
>
> > Is it possible to get the GridViews to come out full size, even at the
> > expense of all the item views in the ListView being larger? How could
> > I do that?
>
> > ****** GridList.java *******
>
> > package com.example.gridlist;
>
> > import java.util.ArrayList;
>
> > import android.app.ListActivity;
> > import android.content.Context;
> > import android.os.Bundle;
> > import android.view.View;
> > import android.view.ViewGroup;
> > import android.widget.ArrayAdapter;
> > import android.widget.GridView;
> > import android.widget.LinearLayout;
> > import android.widget.TextView;
>
> > public class GridList extends ListActivity {
>
> >    private static final String[] STRINGS = {
> >            "one",
> >            "two",
> >            "three",
> >            "four",
> >            "five",
> >            "six",
> >            "seven",
> >            "eight",
> >            "nine",
> >            "ten",
> >    };
>
> >   �...@override
> >    public void onCreate(Bundle savedInstanceState) {
> >        super.onCreate(savedInstanceState);
> >        String[] satmp = {};            // These shouldn't be needed, but I 
> > get
> > a class cast exception
> >        String[][] saatmp = {{}};       // if I use ArrayList.toArray(),
> > instead of ArratList.toArray(T[])
>
> >        // Build an array of 10 string arrays, which range from length
> > zero to length 9
> >        ArrayList<String[]> strings_array = new ArrayList<String[]>();
> >        ArrayList<String> strings = new ArrayList<String>();
> >        for(int i = 0; i < 10; i++) {
> >                strings_array.add(strings.toArray(satmp));
> >                strings.add(GridList.STRINGS[i]);
> >        }
> >        MyArrayAdapter mAdapter = new MyArrayAdapter(this,
> > R.layout.grid, R.id.text1, strings_array.toArray(saatmp));
> >        this.setListAdapter(mAdapter);
> >    }
>
> >    // This is the "outer" adapter, the one for the ListView
> >        private class MyArrayAdapter extends ArrayAdapter<String[]> {
>
> >                public MyArrayAdapter(Context context, int 
> > textViewResourceId, int
> > textRes, String[][] objects) {
> >                        super(context, textViewResourceId, textRes, objects);
> >                }
>
> >               �...@override
> >                public View getView(int position, View convertView, ViewGroup
> > parent) {
> >            LinearLayout ll;
> >            if (convertView == null) {
> >                ll = (LinearLayout) GridList.this.getLayoutInflater
> > ().inflate(R.layout.grid, null);
> >            } else {
> >                ll = (LinearLayout) convertView;
> >            }
> >            TextView tv = (TextView) ll.findViewById(R.id.text1);
> >            tv.setText("Position #" + position);
> >            GridView gv = (GridView) ll.findViewById(R.id.gridview);
> >            GridAdapter ga = new GridAdapter(GridList.this,
> > android.R.id.text1, this.getItem(position));
> >            gv.setAdapter(ga);
> >            return ll;
> >        }
> >        }
>
> >        // This is the "inner" adapter, the one for the GridView
> >    private class GridAdapter extends ArrayAdapter<String>  {
>
> >                public GridAdapter(Context context, int textViewResourceId, 
> > String[]
> > objects) {
> >                        super(context, textViewResourceId, objects);
> >                }
>
> >               �...@override
> >                public View getView(int position, View convertView, ViewGroup
> > parent) {
> >            TextView tv;
> >            if (convertView == null) {  // if it's not recycled,
> > initialize some attributes
> >                tv = new TextView(GridList.this);
> >            } else {
> >                tv = (TextView) convertView;
> >            }
> >            tv.setText(this.getItem(position));
> >            return tv;
> >        }
> >    }
> > }
>
> > ****** AndroidManifest.xml ******
>
> > <?xml version="1.0" encoding="utf-8"?>
> > <manifest xmlns:android="http://schemas.android.com/apk/res/android";
> >      package="com.example.gridlist"
> >      android:versionCode="1"
> >      android:versionName="1.0">
> >    <application android:icon="@drawable/icon" android:label="Grid
> > List">
> >        <activity android:label="Grid List" android:name=".GridList">
> >            <intent-filter>
> >                <action android:name="android.intent.action.MAIN" />
> >                <category
> > android:name="android.intent.category.LAUNCHER" />
> >            </intent-filter>
> >        </activity>
> >    </application>
> >    <uses-sdk android:minSdkVersion="2" />
> > </manifest>
>
> > ****** grid.xml ******
>
> > <?xml version="1.0" encoding="utf-8"?>
> > <LinearLayout xmlns:android="http://schemas.android.com/apk/res/
> > android"
> >    android:layout_width="fill_parent"
> >    android:layout_height="fill_parent"
> >    android:orientation="vertical"
>
> >        <TextView
> >                android:id="@+id/text1"
> >            android:layout_width="fill_parent"
> >            android:layout_height="wrap_content"
> >        />
> >        <GridView
> >            android:id="@+id/gridview"
> >            android:layout_width="fill_parent"
> >            android:layout_height="wrap_content"
> >            android:numColumns="auto_fit"
> >            android:verticalSpacing="5sp"
> >            android:horizontalSpacing="5sp"
> >            android:columnWidth="90sp"
> >            android:stretchMode="columnWidth"
> >            android:gravity="center"
> >        />
> > </LinearLayout>
>
> > --
> > You received this message because you are subscribed to the Google
> > Groups "Android Developers" group.
> > To post to this group, send email to [email protected]
> > To unsubscribe from this group, send email to
> > [email protected]
> > For more options, visit this group at
> >http://groups.google.com/group/android-developers?hl=en
>
> --
> Romain Guy
> Android framework engineer
> [email protected]
>
> Note: please don't send private questions to me, as I don't have time
> to provide private support.  All such questions should be posted on
> public forums, where I and others can see and answer them

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to