我有一个带有相册项目照片的RecyclerView和CardView项目。
有谁能帮我在每个项目上做onClick动作,即,当点击card1时将导航我到activity1,而当点击card2时将导航我到另一个活动。
请帮帮我吧
我读了所有的帖子,我没有找到解决我的问题。
谢谢。
我在java上的代码。
public class AlbumsAdapter extends RecyclerView.Adapter {
private Context mContext;
private List<Album> albumList;
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView title, count;
public ImageView thumbnail, overflow;
public MyViewHolder(View view) {
super(view);
title = (TextView) view.findViewById(R.id.title);
count = (TextView) view.findViewById(R.id.count);
thumbnail = (ImageView) view.findViewById(R.id.thumbnail);
overflow = (ImageView) view.findViewById(R.id.overflow);
itemView.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View p1)
{
int pos=getAdapterPosition();
if(pos != RecyclerView.NO_POSITION){
Album clickedDataBase=albumList.get(1);
//Toast.makeText(getApplication(), "Clicked Laugh Vote", Toast.LENGTH_SHORT).Show();
Toast.makeText(itemView.getContext(), "view clicked", Toast.LENGTH_SHORT).show();
}
}
});
}
}
public AlbumsAdapter(Context mContext, List<Album> albumList) {
this.mContext = mContext;
this.albumList = albumList;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.album_card, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(final MyViewHolder holder, int position) {
Album album = albumList.get(position);
holder.title.setText(album.getName());
holder.count.setText(album.getNumOfSongs() + " songs");
// loading album cover using Glide library
Glide.with(mContext).load(album.getThumbnail()).into(holder.thumbnail);
holder.overflow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showPopupMenu(holder.overflow);
}
});
}
/**
* Showing popup menu when tapping on 3 dots
*/
private void showPopupMenu(View view) {
// inflate menu
PopupMenu popup = new PopupMenu(mContext, view);
MenuInflater inflater = popup.getMenuInflater();
inflater.inflate(R.menu.menu_album, popup.getMenu());
popup.setOnMenuItemClickListener(new MyMenuItemClickListener());
popup.show();
}
/**
* Click listener for popup menu items
*/
class MyMenuItemClickListener implements PopupMenu.OnMenuItemClickListener {
public MyMenuItemClickListener() {
}
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
switch (menuItem.getItemId()) {
case R.id.action_add_favourite:
Toast.makeText(mContext, "Add to favourite", Toast.LENGTH_SHORT).show();
return true;
case R.id.action_play_next:
Toast.makeText(mContext, "Play next", Toast.LENGTH_SHORT).show();
return true;
default:
}
return false;
}
}
@Override
public int getItemCount() {
return albumList.size();
}
}
最好的方法是在adapter中设置itemview上的click监听器,然后取其位置并为其写一个开关案例。
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView name;
MyButton BtnRequest;
CircularImageView profileImage;
ViewHolder(View itemView) {
super(itemView);
name = itemView.findViewById(R.id.UserName);
BtnRequest = itemView.findViewById(R.id.BtnRequest);
profileImage = itemView.findViewById(R.id.profileImage);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
if (mClickListener != null) mClickListener.onItemClick(view, getAdapterPosition());
}
}
然后在你的主活动中实现它
public class UserListCanReq extends AppCompatActivity implements yourAdapters.ItemClickListener
然后在活动中覆盖你的方法。
@Override
public void onItemClick(View view, int position) {
//Toast.makeText(this, "You clicked " + adapter.getItem(position) + " on row number " + position, Toast.LENGTH_SHORT).show();
switch(adapter.getItem(position)){
case 0:
Album album = albumlist.get(position);
Intent intent = new Intent(AdminActivity.this, DatesActivity.class);
intent.putExtra("userid",album.getId());
startActivity(intent);
break;
case 1:
Album album= albumlist.get(position);
Intent intent = new Intent(AdminActivity.this, DatesActivity.class);
intent.putExtra("userid",album.getId());
startActivity(intent);
break;
}
}