如何解决尝试在 Adapter AndroidStudio 中的空对象引用上调用接口方法
我正在尝试制作一个片段,它将向我展示来自 RSS 频道的新闻。我正在使用带有 CardView 的 RecyclerView。我的程序显示的新闻列表是正确的,但是当我点击这个新闻之一时,我收到了这个错误:
java.lang.NullPointerException:尝试在空对象引用上调用接口方法“void com.example.myapplication.Model.ItemClickListener.onClick(android.view.View,int,boolean)” 在 com.example.myapplication.Model.FeedViewHolder.onClick(FeedAdapter.java:38)
我的代码(FeedAdapter.java):
package com.example.myapplication.Model;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.example.myapplication.R;
class FeedViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener,View.OnLongClickListener{
public TextView txtTitle,txtPubDate,txtContent;
private ItemClickListener itemClickListener;
public FeedViewHolder(View itemView) {
super(itemView);
txtTitle = (TextView)itemView.findViewById(R.id.txtTitle);
txtPubDate = (TextView)itemView.findViewById(R.id.txtPubDate);
txtContent = (TextView)itemView.findViewById(R.id.txtContent);
itemView.setOnClickListener(this);
itemView.setOnLongClickListener(this);
}
public void setItemClickListener(ItemClickListener itemClickListener) {
this.itemClickListener = itemClickListener;
}
@Override
public void onClick(View v) {
itemClickListener.onClick(v,getBindingAdapterPosition(),false);
}
@Override
public boolean onLongClick(View v) {
itemClickListener.onClick(v,true);
return true;
}
}
public class FeedAdapter extends RecyclerView.Adapter<FeedViewHolder>{
private RSSObject rssObject;
private Context mContext;
private LayoutInflater inflater;
public FeedAdapter(RSSObject rssObject,Context mContext) {
this.rssObject = rssObject;
this.mContext = mContext;
inflater = LayoutInflater.from(mContext);
}
@NonNull
@Override
public FeedViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
View itemView = inflater.inflate(R.layout.row,parent,false);
return new FeedViewHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull FeedViewHolder holder,int position) {
holder.txtTitle.setText(rssObject.getItems().get(position).getTitle());
holder.txtPubDate.setText(rssObject.getItems().get(position).getPubDate());
holder.txtContent.setText(rssObject.getItems().get(position).getContent());
Intent browserIntent = new Intent(Intent.ACTION_VIEW,Uri.parse(rssObject.getItems().get(position).getLink()));
browserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(browserIntent);
}
@Override
public int getItemCount() {
return rssObject.items.size();
}
}
在我的梦中,点击一个 Row 对象后,浏览器应该打开当前的新闻页面。但我不知道该怎么办。谢谢!
解决方法
您实际上从未将侦听器设置为 View Holder,即从未调用 class DisplayScreen(Widget):
def change(self,transcription,confidence):
self.ids.transcription_label.text = transcription
self.ids.confidence_label.text = confidence
class TranscriptionApp(App):
def build(self):
return DisplayScreen()
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。