Frage

Ich versuche zu schreiben BaseAdapter zu meinem GrivView aber in

public View getView(int position, View convertView, ViewGroup parent) { ... }

das position Während des nächsten Elements ist es:

visible elements
---------------
|  1   2   3  |
|  4   5   6  | <--- screen
|  7   8   9  |
---------------

nonvisible elements
|  1   2   3  | <-- below visible area
|  4   5   6  |

wo real ist:

visible elements
---------------
|  1   2   3  |
|  4   5   6  | 
|  7   8   9  |
---------------

nonvisible elements
| 10  11  12  |
| 13  14  15  | 

Ich bin mir bewusst, dass es das richtige Verhalten ist (es zählt nur sichtbare Elemente), aber wie kann man die eigentliche Position des Elements auf die Liste bringen? Oder wie Sie wissen, welches Layout ich zurückkehren soll?

BEARBEITEN: Die zurückgegebene Zahl ist jedoch viel zufällig als ich, selbst auf dem Bildschirm.

War es hilfreich?

Lösung

Verwendung BaseAdapter genau wie Google documentatnion zeigt gut.

Mein Problem war:

  • NICHT Verwenden von Vieweholdern

  • oder versuchen, ID in Sichthalle zu halten

Ich sollte benutzen ViewHolder wie folgt:

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;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top