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.

¿Fue útil?

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
scroll top