Então, eu tenho esse problema que tinha antes e, naturalmente, pedi ajuda aqui . A resposta de Luksprog foi ótima, porque eu não tinha ideia de como o ListView e o GridView se otimizavam com a reciclagem de Views. Assim, com o conselho dele, pude mudar a maneira como adicionei Views ao meu GridView. O problema agora é que tenho algo que não faz sentido. Este é o meu getView
do meu 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;
}
}
O problema é que quando eu rolar, isso acontece, e não na posição 0 ... Parece a posição 6 e a posição 8, além de colocar duas na posição 8. Agora, ainda estou tentando entender como usar o ListView e o GridView, o que faço não entendo por que isso está acontecendo. Uma das principais razões pelas quais estou fazendo essa pergunta é ajudar outras pessoas que provavelmente não sabem sobre a reciclagem do ListView e do GridView, ou a maneira como este artigo descreve o mecanismo ScrapView.
Mais tarde Editar
Adicionando link a uma conversa no IO do Google, basicamente é tudo o que você precisa para entender como o ListView funciona. Link estava morto em um dos comentários. Portanto, user3427079 foi bom o suficiente para atualizar esse link. Aqui está para fácil acesso.
0
).
ListView
necessário exibir uma nova linha (como continuar a rolar para baixo / para cima). O problema é que a visão que acabou de desaparecer e que será usada em futuras posições necessárias TextView
já foi acrescentada, esse é o problema. Para resolvê-lo, você deve removê-lo no getView
método se o getView
método for chamado para qualquer outra posição que não 0
.