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>
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:
et
J'espère que cela peut vous aider aussi bien.
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);
Essayez ce code source GitHub Code de la liste de la liste de dépenses avec GridView