Posición absoluta en Baseadapter de GrivView
-
25-10-2019 - |
Pregunta
Estoy tratando de escribir BaseAdapter
para mi GrivView
pero en
public View getView(int position, View convertView, ViewGroup parent) { ... }
la position
Mientras que la próxima vez es:
visible elements
---------------
| 1 2 3 |
| 4 5 6 | <--- screen
| 7 8 9 |
---------------
nonvisible elements
| 1 2 3 | <-- below visible area
| 4 5 6 |
Donde está el Real:
visible elements
---------------
| 1 2 3 |
| 4 5 6 |
| 7 8 9 |
---------------
nonvisible elements
| 10 11 12 |
| 13 14 15 |
Soy consciente de que es un comportamiento correcto (solo cuenta los elementos visibles), pero ¿cómo obtener la posición real del elemento en la lista? ¿O cómo saber qué diseño debo regresar?
EDITAR: Sin embargo, el número devuelto es mucho más aleatorio de lo que mostré, incluso en la pantalla.
Solución
Usando BaseAdapter
Exactamente como Google Documentatnion Shows funciona bien.
Mi problema estaba:
NO Usando Viewholder
o tratando de mantener la identificación en Viewholder
Debo usar ViewHolder
Como lo siguiente:
public View getView(int position, View convertView, ViewGroup parent) {
// create holder
ViewHolder holder; // check if layout exists
if (convertView == null) { // if it's not recycled, initialize some
LayoutInflater inflater = LayoutInflater.from(mContext);
convertView = (LinearLayout) inflater.inflate(R.layout.card_prev,
null);
// Create layout elements
ImageView image = (ImageView) convertView
.findViewById(R.id.imageViewThumbnail);
TextView desc = (TextView) convertView
.findViewById(R.id.textViewDescription);
// Place layout elements in holder
holder = new ViewHolder();
holder.id = position;
holder.preview = image;
holder.text = desc;
convertView.setTag(holder);
} else {
// Get existing holder
holder = (ViewHolder) convertView.getTag();
}
// Update layout here using layout elements from holder
String imageName = "image_" + (position + 1);
final int imageId = mContext.getResources().getIdentifier(imageName,
"drawable", "com.myapp");
holder.text.setText("" + (position+1));
holder.preview.setImageResource(imageId);
holder.preview.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent fullScreenIntent = new Intent(v.getContext(),
FullScreenImage.class);
fullScreenIntent.putExtra("imageRes", imageId);
MainMenuActivity.currentShownActivity
.startActivity(fullScreenIntent);
}
});
return convertView;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow