我可以使用RecyclerView + CardView显示项目列表。现在的问题是RecyclerView在点击时没有响应。我在另一个应用程序上使用类似的方式,它工作正常。不知道为什么它不适用于这种情况。
MainActivity.java
public class MainActivity extends AppCompatActivity {
TrainingAdapter adapter;
RecyclerView recView;
ArrayList<Training> trainingList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
recView = (RecyclerView) findViewById(R.id.training_list_view);
recView.setLayoutManager(new LinearLayoutManager(MainActivity.this));
trainingList = new ArrayList<Training>();
/* do some processings to populate trainingList here
for (int x = 0; ....)
trainingList.add(new Training(..,..,..));
/*
adapter = new TrainingAdapter(trainingList);
adapter.setOnItemClickListener(new ClickListener() {
@Override
public void onItemClick(int position, View v) {
Toast.makeText(MainActivity.this, "OK!", Toast.LENGTH_LONG).show();
}
@Override
public void onItemLongClick(int position, View v) {
Toast.makeText(MainActivity.this, "Awesome dude!", Toast.LENGTH_LONG).show();
}
});
recView.setAdapter(adapter);
}
}
ClickListener.java
public interface ClickListener {
void onItemClick(int position, View v);
void onItemLongClick(int position, View v);
}
TrainingAdapter.java
public class TrainingAdapter extends RecyclerView.Adapter<TrainingAdapter.ViewHolder> {
ArrayList<Training> trainingList;
static ClickListener mListener;
public TrainingAdapter(ArrayList<Training> list){
trainingList = list;
}
public void setOnItemClickListener(ClickListener cl){
TrainingAdapter.mListener = cl;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
final LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
final View v = layoutInflater.inflate(R.layout.item_list, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Training trn = trainingList.get(position);
holder.tvName.setText(trn.getEventName());
holder.tvDescription.setText(trn.getEventDescription());
holder.tvDate.setText("Date: "+trn.getEventDate());
holder.tvVenue.setText("Location: "+trn.getEventVenue());
holder.tvType.setText("Event Type: Training");
}
@Override
public int getItemCount() {
if (trainingList != null) return trainingList.size();
return 0;
}
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
private TextView tvName;
private TextView tvDescription;
private TextView tvDate;
private TextView tvVenue;
private TextView tvType;
public ViewHolder(View itemView) {
super(itemView);
tvName = (TextView) itemView.findViewById(R.id.tvEventName);
tvDescription = (TextView) itemView.findViewById(R.id.tvEventDescription);
tvDate = (TextView) itemView.findViewById(R.id.tvEventDate);
tvVenue = (TextView) itemView.findViewById(R.id.tvEventVenue);
tvType = (TextView) itemView.findViewById(R.id.tvEventType);
}
@Override
public void onClick(View view) {
mListener.onItemClick(getAdapterPosition(), view);
}
@Override
public boolean onLongClick(View view) {
mListener.onItemLongClick(getAdapterPosition(), view);
return false;
}
}
}
欢迎任何建议:)
答案 0 :(得分:0)
通过使用ViewHolder
itemView
课程修改为以下内容
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
private TextView tvName;
private TextView tvDescription;
private TextView tvDate;
private TextView tvVenue;
private TextView tvType;
public ViewHolder(View itemView) {
super(itemView);
tvName = (TextView) itemView.findViewById(R.id.tvEventName);
tvDescription = (TextView) itemView.findViewById(R.id.tvEventDescription);
tvDate = (TextView) itemView.findViewById(R.id.tvEventDate);
tvVenue = (TextView) itemView.findViewById(R.id.tvEventVenue);
tvType = (TextView) itemView.findViewById(R.id.tvEventType);
itemView.setOnClickListener(this); //add this two lines
itemView.setOnLongClickListener(this);
}
@Override
public void onClick(View view) {
mListener.onItemClick(getAdapterPosition(), view);
}
@Override
public boolean onLongClick(View view) {
mListener.onItemLongClick(getAdapterPosition(), view);
return true;
}
}