Слушатель GridView OnClick иногда не работает
У меня странная проблема. У меня есть gridView с 9 пунктами (0-8) (может быть больше / меньше). Как показано на рисунке ниже, он показывает первые 4 элемента на экране моего устройства.
Зеленая отметка добавляется каждый раз, когда на элемент нажимают. Работает нормально почти каждый раз. Но всякий раз, когда я прокручиваю вниз и быстро щелкаю, прослушиватель щелчков 5-го элемента (Item 4) не срабатывает немедленно. Это может быть небольшая проблема, но для пользователя, иногда это может быть немного раздражает. Пожалуйста, скажите мне, как я могу сделать это безупречным? Вот код моего customAdapter:
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
View rowView = convertView;
Holder holder = null;
if (rowView == null) {
inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
rowView = inflater.inflate(R.layout.single_griditem_gitfamount, null);
holder = new Holder();
holder.textViewGiftAmount = (TextView) rowView.findViewById(R.id.textViewGridAmount);
holder.imageViewGiftTick = (ImageView) rowView.findViewById(R.id.imageViewGridTick);
holder.cardViewGridAmount = (CardView) rowView.findViewById(R.id.cardViewGridAmount);
rowView.setTag(holder);
} else {
rowView = convertView;
holder = (Holder) rowView.getTag();
}
holder.textViewGiftAmount.setText("Item " + position);
if (position == clickedpos) {
holder.imageViewGiftTick.setVisibility(View.VISIBLE);
}
else{
holder.imageViewGiftTick.setVisibility(View.GONE);
}
// final Holder h = holder;
holder.cardViewGridAmount.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
clickedpos = position;
notifyDataSetChanged();
}
});
return rowView;
}
1 ответ
Решение
Если вы нажимаете на полный элемент, то вы можете выбрать itemclicklistener
gridview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
Toast.makeText(MainActivity.this, "" + position, Toast.LENGTH_SHORT).show();
}
});
и вы также можете использовать переработчик.