首页 > 解决方案 > 如何使用 onclick 在回收站视图中打开活动?

问题描述

我正在尝试构建一个新闻应用程序,一旦用户单击新闻项目,它将在另一个活动中详细打开新闻。但是目前,一旦用户单击任何新闻项目,我在尝试打开活动时遇到问题。

我正在使用回收器视图来解析我使用 volley 从 JSON 获得的响应以进行 Internet 连接,我已经尝试了 StackOverflow 中已经说明的一些示例,但似乎没有达到我的预期。

@Override
    public void onBindViewHolder(@NonNull final newsAdapter.viewHolder viewHolder, int i) {

    dataModel dataModel = mDataModel.get(i);
    viewHolder.mTextView.setText(dataModel.getTitle());
    viewHolder.mTextDescrip.setText(dataModel.getDescrip());
    Glide.with(context).load(dataModel.getImage()).into(viewHolder.mImageView);

    viewHolder.mclickListener.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {

            context.startActivity(new Intent(context, newsActivity.class));

        }
    });

}


 public viewHolder(@NonNull View itemView) {

        super(itemView);
        mTextView = itemView.findViewById(R.id.layout_text);
        mImageView = itemView.findViewById(R.id.layout_image);
        mTextDescrip = itemView.findViewById(R.id.layout_descrip);
        mclickListener = (CardView) itemView.findViewById(R.id.recyclerviewlayout);
    }

我尝试添加带有 toast 消息的 setOnClickListener 以在用户单击项目时显示消息;它显示了消息,但是当我尝试使用意图打开另一个活动时,应用程序不断崩溃。

我没有使用模拟器来运行此应用程序,因此我无法获得导致应用程序崩溃的确切错误消息。

标签: androidandroid-studioandroid-intentandroid-recyclerviewonclicklistener

解决方案


Intent.FLAG_ACTIVITY_NEW_TASK如果从回收站视图打开活动,您应该添加请检查此代码

@Override
    public void onBindViewHolder(@NonNull final newsAdapter.viewHolder viewHolder, int i) {

    dataModel dataModel = mDataModel.get(i);
    viewHolder.mTextView.setText(dataModel.getTitle());
    viewHolder.mTextDescrip.setText(dataModel.getDescrip());
    Glide.with(context).load(dataModel.getImage()).into(viewHolder.mImageView);

    viewHolder.mclickListener.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {
        Intent newsIntent=new Intent(context, newsActivity.class);
        newsIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        context.startActivity(newsIntent);

        }
    });

}


 public viewHolder(@NonNull View itemView) {

        super(itemView);
        mTextView = itemView.findViewById(R.id.layout_text);
        mImageView = itemView.findViewById(R.id.layout_image);
        mTextDescrip = itemView.findViewById(R.id.layout_descrip);
        mclickListener = (CardView) itemView.findViewById(R.id.recyclerviewlayout);
    }

推荐阅读