Re: [android-developers] GridView in a ListView: results are unusable the way it is now
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 <brione2001@gmail.com> 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 android-developers@googlegroups.com
> To unsubscribe from this group, send email to
> android-developers+unsubscribe@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/android-developers?hl=en
>
--
Romain Guy
Android framework engineer
romainguy@android.com
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 android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
0 Comments:
Post a Comment
Subscribe to Post Comments [Atom]
<< Home