Pregunta

Estoy usando una listfragment personalizada para mostrar una lista en la que incluso las filas tienen un fondo y las filas impares no.Para hacer esto, hice una subclase de ArrayAdapter con un método de Overriden GetView (int, view, viewgroup) y configure el recurso de fondo para las filas uniformes allí.

Funcionó, pero necesitaba ajustar las dimensiones de las vistas para ser iguales en las filas con y sin fondo, así que ajusté los LayOutParams de la siguiente manera:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view = super.getView(position, convertView, parent);
    if ((position & 1) == 0) {
        view.setBackgroundResource(R.drawable.marcador_wink_normal);
    }
    ViewGroup.LayoutParams params = view.getLayoutParams();
    params.height = rowHeight;
    view.setLayoutParams(params);
    return view;
}

Intenté esto, y pareció funcionar hasta que me desplazo y luego me levanté, lo que resultó en que el fondo se aplica a cada fila.

Mi pregunta es: ¿Qué estoy haciendo mal?

Estoy usando la biblioteca de soporte V4 para los fragmentos, y este es el método Oncreate (Bundle) de mi list fragmento personalizado:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    int layout = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ?
            android.R.layout.simple_list_item_activated_1 : android.R.layout.simple_list_item_1;

    setListAdapter(new WinkAdapter(getActivity(), layout, TEST_LIST));
}

¿Fue útil?

Solución

La vista utilizada para compensar la lista se reutiliza una vez que no son visibles en la pantalla.

En su código original, una vez que el fondo se configuró en R.DRAWABLE.marcador_wink_normal en una vista dada, fue R.Drawable.marcador_wink_normal para siempre.Cuando agregó el más, lo hiciste, configuró el fondo correctamente en estas vistas reutilizadas.

Otros consejos

De acuerdo, lo resolví solo agregando una declaración :

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view = super.getView(position, convertView, parent);
    if ((position & 1) == 0) {
        view.setBackgroundResource(R.drawable.marcador_wink_normal);
    }
    else {
        view.setBackgroundColor(0);
    }
    ViewGroup.LayoutParams params = view.getLayoutParams();
    params.height = 100;
    view.setLayoutParams(params);
    return view;
}

Pero todavía no entiendo por qué sucedió el problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top