web-dev-qa-db-fra.com

GridView intérieure Liste extensible dans android

Je veux mettre un gridview avec des images dans une liste extensible ... Je l'ai déjà fait, mais la grille ne montre pas tout l'article ...

Comment puis-je rendre mon enfant de liste extensible Adapter à la taille GridView?

Adaptateur de liste

public class CustomListAdapter extends BaseExpandableListAdapter
{
    String[]            catg    = { "Administração, Escritorio e Industria", "Cultura e Entretenimento", "Educação e Crianças", "Eventos e Estado do tempo", "Amigos, Familia e Habitações", "Multimédia", "Diversos", "Números e Letras", "Restaurantes e Hoteis", "Desporto, Saude e Beleza", "Lojas", "Turismo e Natureza", "Transportes" };

    Context             myctx;


    @Override
    public Object getChild(int groupPosition, int childPosition)
    {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public long getChildId(int groupPosition, int childPosition)
    {
        return childPosition;
    }

    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent)
    {
        ViewGroup item = getViewGroupChild(convertView, parent);
        GridView label = (GridView) item.findViewById(ipvc.estg.placebook.R.id.gridview);
        label.setAdapter(new GridAdapter(parent.getContext(), groupPosition+1));
        return item;
    }

    private ViewGroup getViewGroupChild(View convertView, ViewGroup parent)
    {
        // The parent will be our ListView from the ListActivity
        if (convertView instanceof ViewGroup)
        {
            return (ViewGroup) convertView;
        }
        Context context = parent.getContext();
        LayoutInflater inflater = LayoutInflater.from(context);
        ViewGroup item = (ViewGroup) inflater.inflate(ipvc.estg.placebook.R.layout.expandable_list_row, null);
        return item;
    }

    @Override
    public int getChildrenCount(int groupPosition)
    {
        return 1;
    }

    @Override
    public Object getGroup(int groupPosition)
    {
        return catg[groupPosition];
    }

    @Override
    public int getGroupCount()
    {
        return catg.length;
    }

    @Override
    public long getGroupId(int groupPosition)
    {
        return groupPosition;
    }



    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent)
    {
        View item = getViewGroupGroup(convertView, parent);

        TextView text = (TextView) item.findViewById(Android.R.id.text1);
        text.setText(catg[groupPosition]);
        return item;
    }

    private View getViewGroupGroup(View convertView, ViewGroup parent)
    {
        // The parent will be our ListView from the ListActivity
        if (convertView instanceof View)
        {
            return (View) convertView;
        }
        Context context = parent.getContext();
        LayoutInflater inflater = LayoutInflater.from(context);
        View item1 = (View) inflater.inflate(Android.R.layout.simple_expandable_list_item_1, null);

        return item1;
    }

    @Override
    public boolean hasStableIds()
    {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition)
    {
        // TODO Auto-generated method stub
        return true;
    }

}

liste de la ligne de ligne

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    Android:id="@+id/linearLayout1"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <GridView
        xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:id="@+id/gridview"
        Android:layout_width="fill_parent"
        Android:layout_height="fill_parent"
        Android:columnWidth="50dp"
        Android:numColumns="auto_fit"
        Android:verticalSpacing="10dp"
        Android:horizontalSpacing="10dp"
        Android:stretchMode="columnWidth"
        Android:gravity="center" />
</LinearLayout>
36
Zasuk

J'ai fait des tonnes de recherches pour la résolution de cette situation, mais je n'ai rien trouvé jusqu'à présent, alors j'ai fait une solution de contournement.

Cette solution de contournement suppose que vous connaissez/peut récupérer la largeur de vos colonnes et la hauteur de vos rendriers de la cellule de grille (la taille DP définie dans votre présentation XMLS).

Vous devez insérer quelques lignes supplémentaires à l'intérieur de votre ExpandableListAdapter 's getChildView méthode:

@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent)
{
    ViewGroup item = getViewGroupChild(convertView, parent);
    GridView label = (GridView) item.findViewById(ipvc.estg.placebook.R.id.gridview);
    label.setAdapter(new GridAdapter(parent.getContext(), groupPosition+1));

    // initialize the following variables (i've done it based on your layout
    // note: rowHeightDp is based on my grid_cell.xml, that is the height i've
    //    assigned to the items in the grid.
    final int spacingDp = 10;
    final int colWidthDp = 50;
    final int rowHeightDp = 20;

    // convert the dp values to pixels
    final float COL_WIDTH = getBaseContext().getResources().getDisplayMetrics().density * colWidthDp;
    final float ROW_HEIGHT = getBaseContext().getResources().getDisplayMetrics().density * rowHeightDp;
    final float SPACING = getBaseContext().getResources().getDisplayMetrics().density * spacingDp;

    // calculate the column and row counts based on your display
    final int colCount = (int)Math.floor((parentView.getWidth() - (2 * SPACING)) / (COL_WIDTH + SPACING));
    final int rowCount = (int)Math.ceil((intValues.size() + 0d) / colCount);

    // calculate the height for the current grid
    final int GRID_HEIGHT = Math.round(rowCount * (ROW_HEIGHT + SPACING));

    // set the height of the current grid
    label.getLayoutParams().height = GRID_HEIGHT;

    return item;
}

Avec l'addition ci-dessus, j'ai pu produire les dispositions affichées suivantes:

expandable list with grid - portrait

et

expandable list with grid - landscape

J'espère que cela peut vous aider aussi bien.

36
rekaszeru

tout ce que vous avez à faire est de modifier la grille de vue avec GridView Heights Extensible

et configurer xml avec

Android:isScrollContainer="false"

et en code

expandableHeightGridView.setExpanded(true);
3
shimi uhlman

Essayez ce code source GitHub Code de la liste de la liste de dépenses avec GridView

https://github.com/coolwd10/expandablarlistWithGirdView

1
Mahi