Absolute Position im Basisadapter von Grivview
-
25-10-2019 - |
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.
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