Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用onclick在recyclerview中打开活动?_Android_Android Studio_Android Intent_Android Recyclerview_Onclicklistener - Fatal编程技术网

Android 如何使用onclick在recyclerview中打开活动?

Android 如何使用onclick在recyclerview中打开活动?,android,android-studio,android-intent,android-recyclerview,onclicklistener,Android,Android Studio,Android Intent,Android Recyclerview,Onclicklistener,我正在尝试构建一个新闻应用程序,一旦用户点击一条新闻,它就会在另一个活动中详细打开新闻。但目前,当用户单击任何新闻项时,我在尝试打开活动时遇到问题 我正在使用一个回收器视图来解析通过截取互联网连接从JSON得到的响应,我已经尝试了StackOverflow中已经说明的一些示例,但non似乎达到了我的预期效果 @Override public void onBindViewHolder(@NonNull final newsAdapter.viewHolder viewHolder, in

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

我正在使用一个回收器视图来解析通过截取互联网连接从JSON得到的响应,我已经尝试了StackOverflow中已经说明的一些示例,但non似乎达到了我的预期效果

@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 messages的setOnClickListener,以便在用户单击某个项目时显示一条消息;它显示消息,但当我试图使用intent打开另一个活动时,应用程序不断崩溃


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

您应该添加
意图。如果从回收器视图打开活动,请检查此代码

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

您也可以使用XML吗?如果下面的答案阻止了崩溃,那么您将错误的
上下文
传递给了
适配器
。您可能确实不想为下一个
活动
@MikeM启动新任务。我真的很困惑,下面的答案解决了这个问题,但我似乎还有一个更大的问题,因为我想完整地显示新闻,但因为它在另一个任务中,所以这不可能发生。@MikeM。当我厌倦了使用
this
getContext
时,它不起作用……你知道如何获得正确的上下文吗?请告诉我,我需要这个来工作。它实际上与您在下一个
活动中可以显示或不能显示的内容无关。这并不是说您在
适配器中使用了错误的东西。我的意思是,当您使用
新建适配器(…)
时,您没有使用正确的
上下文。您需要在那里传递
活动,而不是
getApplication()
,或
getApplicationContext()
,或
getBaseContext()
,等等。它起作用了,但我可以看到我所期望的可能不起作用,也就是说,从单击的每个项目中完整显示新闻详细信息。