java - 为什么我的 View.findViewById 返回 null?
问题描述
我目前正在练习使用Fragment
and RecyclerView
,并在RecyclerView.Adapter
课堂上工作。当我尝试运行该项目时,该应用程序无法正常运行。我发现在logcat堆栈跟踪中,有一个错误说
java.lang.NullPointerException: Attempt to invoke virtual method 'void
android.widget.ImageView.setImageResource(int)' on a null object reference
我尝试调试,并在我的代码中发现:
public class LanguageAdapter extends RecyclerView.Adapter<LanguageAdapter.LanguageViewHolder> {
private List<Language> mLanguageList;
public LanguageAdapter(List<Language> languageList) {
mLanguageList = languageList;
}
@NonNull
@Override
public LanguageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_item_language, parent, false);
return new LanguageViewHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull LanguageViewHolder holder, int position) {
Language language = mLanguageList.get(position);
holder.bind(language);
}
@Override
public int getItemCount() {
return mLanguageList.size();
}
public class LanguageViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private ImageView mLanguageLogoImageView;
private TextView mLanguageNameTextView;
private TextView mLanguageRankTextView;
private Language mLanguage;
public LanguageViewHolder(@NonNull View itemView) {
super(itemView);
mLanguageLogoImageView = itemView.findViewById(R.id.language_logo);
mLanguageNameTextView = itemView.findViewById(R.id.language_name);
mLanguageRankTextView = itemView.findViewById(R.id.language_rank);
}
@Override
public void onClick(View v) {
}
private void bind(Language language) {
mLanguage = language;
mLanguageLogoImageView.setImageResource(mLanguage.getLanguageLogo());
mLanguageNameTextView.setText(mLanguage.getLanguageName());
mLanguageRankTextView.setText(mLanguage.getLanguageRank());
}
}
}
这部分
mLanguageLogoImageView = itemView.findViewById(R.id.language_logo);
mLanguageNameTextView = itemView.findViewById(R.id.language_name);
mLanguageRankTextView = itemView.findViewById(R.id.language_rank);
返回空值。但是itemView
,我从
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_item_language, parent, false);
确实返回了一个View
. 但是当我尝试时View.findViewById()
,它返回null。我已经阅读了其他线程,包括这个。但它并没有解决我的问题,因为我正在使用适配器。我在这里错过了一些步骤吗?
解决方案
mLanguageLogoImageView = itemView.findViewById(R.id.language_logo);
mLanguageNameTextView = itemView.findViewById(R.id.language_name);
mLanguageRankTextView = itemView.findViewById(R.id.language_rank);
当应用程序尝试使用具有 null 值的对象引用时,将引发NullPointerException 。
首先检查是否存在相应 xml 中的所有 findViewById 元素(R.layout.list_item_language)
。
推荐阅读
- c# - GetHashCode() 的 Visual Studio 默认实现
- css - Angular 材质:MatTooltip 位置和样式在 MatIcon 上被破坏
- spring - 无法使用编码密码向 Spring oauth 授权服务器进行身份验证
- python - 检查字符串是否包含两个子字符串中的任何一个是否返回 true
- python - Networkx python计算权重
- api - 如何使用 curl 获取私有存储库?
- java - 使用整数和字符进行数组排序
- c++ - glUniform1i 没有效果
- java - 在用户输入的相关部分和数组之间找到匹配的最有效方法是什么?
- batch-file - 如何找到磁盘卷的名称,如果它等于一个变量,然后执行一些操作?