Ich habe eine benutzerdefinierte GridView mit checkbox
, imageView
und textView
. In der gridViewAdapter.getView()
habe ich Zeilen und Halter verwendet, um die Werte für Kontrollkästchen, ImageView und Textview zu initialisieren.Wie erhält man die GridView-Position, während das Kontrollkästchen aktiviert ist?
Wenn ich jetzt auf checkbox klicke, muss ich die Position dieses gridView-Elements abrufen, damit ich das Bild von seiner Position zu einer anderen Position in einer gridView verschieben kann.
ich so versucht:
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
ViewHolder holder = null;
if (row == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new ViewHolder();
holder.imageTitle = (TextView) row.findViewById(R.id.textView);
holder.image = (ImageView) row.findViewById(R.id.imageView);
holder.cb=(CheckBox)row.findViewById(R.id.checkBox);
holder.cb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//here with this checkbox which just got clicked,
// i want to access its gridview position or holder index
// so i can get access to the image
}
});
row.setTag(holder);
} else {
holder = (ViewHolder) row.getTag();
}
ImageItem item = (ImageItem)dataArraylist.get(position);
holder.imageTitle.setText(item.getTitle());
holder.image.setImageBitmap(item.getImage());
// holder.cb.setChecked(item.isSelected());
return row;
}
public static class ViewHolder {
public TextView imageTitle;
public ImageView image;
public CheckBox cb;
}
AKTUALISIERT: ok den Parameter "Position" von getView Funktion arbeitet. public Anzeigen von getView (int-Position, View convertView, ViewGroup-Parent) {}. Aber jetzt, wenn ich Kontrollkästchen in der ersten Ansicht auswählen, wird die Position des Kontrollkästchens korrekt zurückgegeben. Wenn ich jedoch zur nächsten Ansicht blättern gehe, ist die Position der Checkbox zufällig. Wie löst man das?
public View getView(int position, View convertView, final ViewGroup parent) {
final int pos=position;
ViewHolder holder = null;
if (convertView == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
convertView = inflater.inflate(layoutResourceId, parent, false);
holder = new ViewHolder();
holder.image = (ImageView) convertView.findViewById(R.id.imageView);
holder.cb=(CheckBox)convertView.findViewById(R.id.checkBox);
if(flag) {
holder.cb.setVisibility(View.VISIBLE);
holder.cb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("MYLOG", "position: "+pos);
ImageItem tempObj;
ImageItem item = clickedArraylist.get(pos);
if(item.isSelected())
item.setSelected(false);
else
item.setSelected(true);
notifyDataSetChanged();
}
});
}
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
holder.cb.setOnCheckedChangeListener(null);
}
ImageItem item = clickedArraylist.get(position);
holder.image.setImageBitmap(item.getImage());
holder.cb.setChecked(item.isSelected());
return convertView;
}
public static class ViewHolder {
public ImageView image;
public CheckBox cb;
}
Holen Sie es vom Adapter entfernen – silverFoxA
ok der Parameter "position" der getView Funktion funktioniert. public Zeigen Sie getView an (int-Position, View convertView, ViewGroup-Parent) {}. Aber jetzt, wenn ich das Kontrollkästchen in der ersten Ansicht ankreuze, wird die Position des Kontrollkästchens korrekt zurückgegeben. aber wenn ich zur nächsten Ansicht scrolle, sind die Positionen der Checkbox zufällig. Wie löst man das? – Jana
Es ist nicht automatisch .. nur wenn der Benutzer das Kontrollkästchen aktiviert hat, wird es ein anderes Element überprüfen bcoz die Position ist jetzt zufällig – Jana