如何刷新网格视图高度到其动态内容的大小?

时间:2014-07-16 17:19:17

标签: android

我使用和适配器渲染以下网格视图:

<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();

我试过但似乎没有任何效果。也许我并没有将它们放在我应该的位置。你能帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

每当您从gridView添加或删除内容时,都会调用notifyDataSetChanged()。但动态高度不会因为notifyDataSetChanged()而发生变化。它只是在您从网格中添加/删除某些内容后更新视图数据。

如果您想要更改网格的实际大小,则可以在从网格中添加/删除某些内容后更改LayoutParams。