Entonces tengo este problema que tenía antes, y naturalmente pedí ayuda aquí . La respuesta de Luksprog fue excelente porque no tenía idea de cómo ListView y GridView se optimizaban con vistas de reciclaje. Entonces, con su consejo, pude cambiar la forma en que agregué Vistas a mi GridView. El problema es que ahora tengo algo que no tiene sentido. Este es mi getView
de mi BaseAdapter
:
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
convertView = inflater.inflate(R.layout.day_view_item, parent, false);
}
Log.d("DayViewActivity", "Position is: "+position);
((TextView)convertView.findViewById(R.id.day_hour_side)).setText(array[position]);
LinearLayout layout = (LinearLayout)convertView.findViewById(R.id.day_event_layout);
//layout.addView(new EventFrame(parent.getContext()));
TextView create = new TextView(DayViewActivity.this);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0, (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 62, getResources().getDisplayMetrics()), 1.0f);
params.topMargin = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1, getResources().getDisplayMetrics());
params.bottomMargin = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1, getResources().getDisplayMetrics());
create.setLayoutParams(params);
create.setBackgroundColor(Color.BLUE);
create.setText("Test");
//the following is my original LinearLayout.LayoutParams for correctly setting the TextView Height
//new LinearLayout.LayoutParams(0, (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 60, getResources().getDisplayMetrics()), 1.0f)
if(position == 0) {
Log.d("DayViewActivity", "This should only be running when position is 0. The position is: "+position);
layout.addView(create);
}
return convertView;
}
}
El problema es cuando me desplazo, esto sucede, y no en la posición 0 ... Parece la posición 6 y la posición 8, además pone dos en la posición 8. Ahora todavía estoy tratando de acostumbrarme a usar ListView y GridView, así que lo hago No entiendo por qué está sucediendo esto. Una de las principales razones por las que estoy haciendo esta pregunta es para ayudar a otros que probablemente no saben sobre ListView y la Vista de reciclaje de GridView, o la forma en que este artículo lo expresa, el mecanismo ScrapView.
Editar más tarde
Agregar un enlace a una charla de Google IO que es básicamente todo lo que necesita para comprender cómo funciona ListView. Link estaba muerto en uno de los comentarios. Entonces user3427079 fue lo suficientemente agradable como para actualizar ese enlace. Aquí es de fácil acceso.
0
).
ListView
necesite una nueva fila para mostrar (como continuar desplazándose hacia abajo / arriba). El problema es que la vista que acaba de desaparecer y que se utilizará en las futuras posiciones necesarias TextView
ya se ha agregado, este es el problema. Para resolverlo, debe eliminarlo en el getView
método si getView
se llama al método para cualquier otra posición que no sea 0
.