私はcheckbox
、imageView
とtextView
でカスタムGridViewコントロールを持っています。 gridViewAdapter.getView()
では、私は行とホルダーを使用して、チェックボックス、imageView、textviewの値を初期化しています。私は、チェックボックスをクリックしたときチェックボックス項目がチェックされているときにGridViewの位置を取得する方法は?
は今、私はそれがGridViewの内の別の位置に位置だから画像を移動することができますので、そのGridViewの項目の位置を取得する必要があります。
私はこのように試してみました:
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;
}
更新日:getViewメソッド関数作品のOKパラメータ "位置"。 public View getView(int position、View convertView、ViewGroup parent){}。 しかし、最初のビューでチェックボックスを選択すると、チェックボックスの位置が正しく返されます。 しかし、次のビューまでスクロールすると、チェックボックスの位置はランダムになります。これを解決するには?
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;
}
の一部は、アダプタからそれを取得する権利ビューを膨張させた後であれば(convertView == null)を閉じて、それ以外を削除する必要があります – silverFoxA
ok getView関数のパラメータ "position"が機能します。 public View getView(int位置、View convertView、ViewGroup親){}。しかし、最初のビューでチェックボックスを選択すると、チェックボックスの位置が正しく返されます。しかし、次のビューまでスクロールすると、チェックボックスの位置はランダムになります。これを解決するには? – Jana
これは自動ではありません。ユーザーがチェックボックスをオンにしたときにのみ、他の項目をチェックします。 – Jana