我正在学习 Android,并且正在使用 RecyclerView 进行测试。我想添加一个 OnItemClickListener,我想看看是否有效,所以我每次点击项目时都会出现一个 Toast,但发生了一些奇怪的事情,只有当我点击 Recycler 的 BETWEEN 卡片时才会触发,而不是当我点击项目时触发。我一直在寻找有同样问题的人,但没有找到任何东西。
这是 RecyclerAdapter 及其 Activity 。
适配器
public class CardAdapter extends ListAdapter<Card, CardAdapter.CardHolder> {
private OnItemClickListener listener;
private Context mContext;
private Intent myIntent;
protected CardAdapter() {
super(DIFF_CALLBACK);
}
private static final DiffUtil.ItemCallback<Card> DIFF_CALLBACK = new DiffUtil.ItemCallback<Card>() {
@Override
public boolean areItemsTheSame(Card oldItem, Card newItem) {
return oldItem.getId() == newItem.getId();
}
@Override
public boolean areContentsTheSame(Card oldItem, Card newItem) {
return oldItem.getCardImage() == newItem.getCardImage() &&
oldItem.getCardName().equals(newItem.getCardName()) &&
oldItem.getCardCode().equals(newItem.getCardCode()) &&
oldItem.getCardSet().equals(newItem.getCardSet()) &&
oldItem.getQuantity() == newItem.getQuantity() &&
oldItem.getRarity().equals(newItem.getRarity());
}
};
@NonNull
@Override
public CardHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.card_item, parent, false);
mContext = parent.getContext();
return new CardHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull CardHolder holder, int position) {
Card currentCard = getItem(position);
Picasso.with(mContext).load(currentCard.getCardImage()).fit().centerInside().into(holder.cardImage);
holder.cardName.setText(currentCard.getCardName());
holder.cardCode.setText(currentCard.getCardCode());
holder.cardSet.setText(currentCard.getCardSet());
holder.rarity.setText(currentCard.getRarity());
}
class CardHolder extends RecyclerView.ViewHolder {
private ImageView cardImage;
private TextView cardName;
private TextView cardCode;
private TextView cardSet;
private TextView quantity;
private TextView rarity;
public CardHolder(View itemView) {
super(itemView);
cardImage = itemView.findViewById(R.id.cardImage);
cardName = itemView.findViewById(R.id.cardName);
cardCode = itemView.findViewById(R.id.cardCode);
cardSet = itemView.findViewById(R.id.cardSet);
rarity = itemView.findViewById(R.id.cardRarity);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(mContext, "epaepa", Toast.LENGTH_SHORT).show();
Log.d("LogDiaViewHolder","epaepa");
}
});
}
public ImageView getCardImage() {
return cardImage;
}
}
public interface OnItemClickListener {
void onItemClick(Card card);
}
public void setOnItemClickListener(OnItemClickListener listener) {
this.listener = listener;
}
}
Activity
public class CardListActivity extends AppCompatActivity {
private CardViewModel cardViewModel;
private View decorView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_card_list);
RecyclerView recyclerView = findViewById(R.id.recycler_view);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setHasFixedSize(true);
final CardAdapter adapter = new CardAdapter();
recyclerView.setAdapter(adapter);
cardViewModel = ViewModelProviders.of(this).get(CardViewModel.class);
cardViewModel.getAllCards().observe(this, new Observer<List<Card>>() {
@Override
public void onChanged(List<Card> cards) {
adapter.submitList(cards);
}
});
decorView = getWindow().getDecorView();
decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int visibility) {
if (visibility == 0) {
decorView.setSystemUiVisibility(hideSystemBars());
}
}
});
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus) {
decorView.setSystemUiVisibility(hideSystemBars());
}
}
}
如果有人想要完整的项目,我会在这里留下 repo 协议(protocol):https://github.com/nochuckles/BattleSpiritsCBDB
任何帮助都会很好,谢谢!
最佳答案
我修好了!显然,如果您具有以下属性:
clickable:true
在您的 CardView
上会发生这种情况。
我不知道为什么,我正在测试不同的东西,当我删除它时,它开始完美运行。我不知道为什么会这样,我会做一些研究,但如果有人有这方面的信息,我将不胜感激,谢谢!
关于android - RecyclerView 的 onClick 将无法单击项目,仅当您单击 BETWEEN 项目时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58283200/