【问题标题】:Unable to start new activity onItemClick in recyclerview Android无法在 recyclerview Android 中启动新活动 onItemClick
【发布时间】:2019-12-12 15:20:50
【问题描述】:

我有一个 recyclerview,它使用 viewmodel 来查看项目。但是当我单击该项目时,它不是单击/开始新活动。

适配器类:

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);
    }

当我单击该项目时,没有任何反应。有人可以帮我吗?

【问题讨论】:

  • 提供适配器的完整代码。您在哪里将您的 MovieAdapterListener 传递给适配器?
  • toast 是否显示预期的输出?
  • @Marat:上面附有完整的适配器
  • @Karrthik 没有任何显示。如果您需要完整的 MainActivity 代码,请告诉我

标签: android android-recyclerview android-viewmodel


【解决方案1】:

最好在你的 ViewHolder 类上实现 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);
    }
});}

【讨论】:

  • Intent(this, MovieDetailsActivity.class) 出错;
  • 如果你在上面实现这个..你得到什么错误?
  • 而不是这个使用“getcontext()”或“getApplicationContext()”
猜你喜欢
  • 1970-01-01
  • 2016-01-05
  • 1970-01-01
  • 1970-01-01
  • 2013-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多