Android 如何使用onclick在recyclerview中打开活动?
我正在尝试构建一个新闻应用程序,一旦用户点击一条新闻,它就会在另一个活动中详细打开新闻。但目前,当用户单击任何新闻项时,我在尝试打开活动时遇到问题 我正在使用一个回收器视图来解析通过截取互联网连接从JSON得到的响应,我已经尝试了StackOverflow中已经说明的一些示例,但non似乎达到了我的预期效果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
@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()
,等等。它起作用了,但我可以看到我所期望的可能不起作用,也就是说,从单击的每个项目中完整显示新闻详细信息。