我使用和适配器渲染以下网格视图:
<GridView
android:id="@+id/gridViewOpciones"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:numColumns="2" >
</GridView>
所述适配器在以下代码行中设置为网格视图:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
...
final GridView gridViewOpciones = (GridView) rootView.findViewById(R.id.gridViewOpciones);
OpcionesAdapter adapter = new OpcionesAdapter(getActivity().getBaseContext(), R.id.gridViewOpciones, getTransactions());
gridViewOpciones.setAdapter(adapter);
...
}
这是我的适配器代码:
public class OpcionesAdapter extends ArrayAdapter<Transaccion> {
private List<Transaccion> transacciones;
private Context context;
public OpcionesAdapter(Context context, int textViewResourceId,
List<Transaccion> objects) {
super(context, textViewResourceId, objects);
this.transacciones = objects;
this.context = context;
}
@Override
public int getCount() {
return transacciones != null ? transacciones.size() : 0;
}
@Override
public Transaccion getItem(int position) {
return transacciones != null ? transacciones.get(position) : null;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Button boton = new Button(context);
Transaccion transaccion = getItem(position);
boton.setText(transaccion.getNombre());
boton.setCompoundDrawablesRelativeWithIntrinsicBounds(
transaccion.getImagen(), null, null, null);
...
return boton;
}
}
如您所见,我以编程方式将图像设置为gridview内的transaccion按钮。我遇到的问题是网格视图没有刷新其高度到其内容的动态高度,设置图像和所有内容。
让我更具体:arrayList transacciones现在正好有4个对象。问题是,如果我将网格的布局高度保留为wrap_content,它只显示前2个按钮的一部分。但是,如果我将其保留为300dp,则所有4个都正确显示。不幸的是,这不是我想要的方式,因为我希望网格的高度是动态的并包装其内容。
研究我看到很多帖子使用以下代码行:
adapter.notifyDataSetChanged();
gridViewOpciones.invalidateViews();
我试过但似乎没有任何效果。也许我并没有将它们放在我应该的位置。你能帮我解决这个问题吗?
答案 0 :(得分:0)
每当您从gridView添加或删除内容时,都会调用notifyDataSetChanged()。但动态高度不会因为notifyDataSetChanged()而发生变化。它只是在您从网格中添加/删除某些内容后更新视图数据。
如果您想要更改网格的实际大小,则可以在从网格中添加/删除某些内容后更改LayoutParams。