无法在 recyclerview Android 中启动新的 activity onItemClick
Unable to start new activity onItemClick in recyclerview Android
我有一个使用 viewmodel 查看项目的 recyclerview。但是当我单击该项目时,它不是 clicking/starting 新的 activity。
适配器class:
public class MovieAdapter extends RecyclerView.Adapter<MovieAdapter.ViewHolder> {
private ArrayList<Search> arrayList;
private Context context;
private LayoutInflater layoutInflater;
private MovieAdapterListener listener;
public MovieAdapter(ArrayList<Search> arrayList, Context context) {
this.context = context;
this.arrayList = arrayList;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if (layoutInflater==null){
layoutInflater=LayoutInflater.from(parent.getContext());
}
MyListBinding myListBinding= DataBindingUtil.inflate(layoutInflater, R.layout.mylist,parent,false);
return new ViewHolder(myListBinding);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
Search myListViewModel=movieListFiltered.get(position);
holder.bind(myListViewModel);
}
@Override
public int getItemCount() {
return movieListFiltered.size();
}
class ViewHolder extends RecyclerView.ViewHolder{
private MyListBinding myListBinding;
public ViewHolder(@NonNull MyListBinding myListBinding) {
super(myListBinding.getRoot());
this.myListBinding=myListBinding;
}
public void bind(Search myli){
this.myListBinding.setMylistmodel(myli);
myListBinding.executePendingBindings();
}
public MyListBinding getMyListBinding(){
return myListBinding;
}
}
public interface MovieAdapterListener {
void onMovieSelected(Search movieSearch);
}
}
然后我在MainActivity下面创建
@Override
public void onMovieSelected(Search movie) {
Toast.makeText(getApplicationContext(), movie.Title, Toast.LENGTH_LONG).show();
Intent intent = new Intent(this, MovieDetailsActivity.class);
intent.putExtra("IMDB_ID", movie.Title);
startActivity(intent);
}
当我点击该项目时没有任何反应。有人可以帮助我吗?
最好在您的 ViewHolder class 上实现 OnClickListener 并将侦听器添加到您想要的视图。
只需在 onBindViewHolder(...) 中添加 setOnClickListener(...),如下所示:
@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
//...
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(), movie.Title, Toast.LENGTH_LONG).show();
Intent intent = new Intent(this, MovieDetailsActivity.class);
intent.putExtra("IMDB_ID", movie.Title);
startActivity(intent);
}
});}
我有一个使用 viewmodel 查看项目的 recyclerview。但是当我单击该项目时,它不是 clicking/starting 新的 activity。
适配器class:
public class MovieAdapter extends RecyclerView.Adapter<MovieAdapter.ViewHolder> {
private ArrayList<Search> arrayList;
private Context context;
private LayoutInflater layoutInflater;
private MovieAdapterListener listener;
public MovieAdapter(ArrayList<Search> arrayList, Context context) {
this.context = context;
this.arrayList = arrayList;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if (layoutInflater==null){
layoutInflater=LayoutInflater.from(parent.getContext());
}
MyListBinding myListBinding= DataBindingUtil.inflate(layoutInflater, R.layout.mylist,parent,false);
return new ViewHolder(myListBinding);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
Search myListViewModel=movieListFiltered.get(position);
holder.bind(myListViewModel);
}
@Override
public int getItemCount() {
return movieListFiltered.size();
}
class ViewHolder extends RecyclerView.ViewHolder{
private MyListBinding myListBinding;
public ViewHolder(@NonNull MyListBinding myListBinding) {
super(myListBinding.getRoot());
this.myListBinding=myListBinding;
}
public void bind(Search myli){
this.myListBinding.setMylistmodel(myli);
myListBinding.executePendingBindings();
}
public MyListBinding getMyListBinding(){
return myListBinding;
}
}
public interface MovieAdapterListener {
void onMovieSelected(Search movieSearch);
}
}
然后我在MainActivity下面创建
@Override
public void onMovieSelected(Search movie) {
Toast.makeText(getApplicationContext(), movie.Title, Toast.LENGTH_LONG).show();
Intent intent = new Intent(this, MovieDetailsActivity.class);
intent.putExtra("IMDB_ID", movie.Title);
startActivity(intent);
}
当我点击该项目时没有任何反应。有人可以帮助我吗?
最好在您的 ViewHolder class 上实现 OnClickListener 并将侦听器添加到您想要的视图。
只需在 onBindViewHolder(...) 中添加 setOnClickListener(...),如下所示:
@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
//...
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(), movie.Title, Toast.LENGTH_LONG).show();
Intent intent = new Intent(this, MovieDetailsActivity.class);
intent.putExtra("IMDB_ID", movie.Title);
startActivity(intent);
}
});}