Quindi ho questo problema che avevo prima e naturalmente ho chiesto aiuto qui . La risposta di Luksprog è stata fantastica perché non avevo idea di come ListView e GridView si ottimizzassero con il riciclaggio delle viste. Quindi con il suo consiglio sono stato in grado di cambiare il modo in cui ho aggiunto Views a GridView. Il problema è che ora ho qualcosa che non ha senso. Questo è il mio getView
dal mio 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;
}
}
Il problema è quando scorro, questo succede, e non sulla posizione 0 ... Sembra che la posizione 6 e la posizione 8, in più ne metta due in posizione 8. Ora sto ancora cercando di capire come usare ListView e GridView, quindi lo faccio non capisco perché questo stia accadendo. Uno dei motivi principali per cui sto ponendo questa domanda è di aiutare gli altri che probabilmente non conoscono la vista sul riciclaggio di ListView e GridView o il modo in cui articolo lo inserisce, il meccanismo di ScrapView.
Modifica successiva
Aggiunta di un collegamento a una discussione su Google IO che è praticamente tutto ciò che serve per capire come funziona ListView. Link era morto sui commenti. Quindi user3427079 è stato abbastanza carino da aggiornare quel link. Qui è per un facile accesso.
0
).
ListView
necessario mostrare una nuova riga (come continuare a scorrere verso il basso / verso l'alto). Il problema è che la vista che è appena scomparsa e che verrà utilizzata nelle posizioni necessarie in futuro ha TextView
già aggiunto ad essa, questo è il problema. Per risolverlo è necessario rimuoverlo nel getView
metodo se il getView
metodo è chiamato per qualsiasi posizione diversa da 0
.