android - 如何使用 XML 中的 Recycler 视图正确地将代码添加到 Fragment?
问题描述
我只有 mainActivity,我使用 3 个片段并使用底部导航浏览它们。到目前为止一切顺利,我能够在模拟器上运行应用程序,但是当我使用 RecyclerView 选择此片段时,我收到此错误消息并且应用程序崩溃
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView.setAdapter(android.support.v7.widget.RecyclerView$Adapter)' on a null object reference
我已经看到了很多类似的答案,并试图让我的方式绕过但没有成功,所以我想我没有把代码放在正确的方式或正确的地方,你能给我一些建议吗?
这是片段代码
public class administrador_atletas extends Fragment {
//Lista de atletas
public List<lista_atletas> lista_atl;
public RecyclerView rcc_lista_atletas;
public lista_atletas_adaptador adaptador_lista_atletas;
public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_administrador_atletas, container, false);
rcc_lista_atletas = (RecyclerView)view.findViewById(R.id.recycler_administrador_atletas);
return view;
}
@Override
public void onActivityCreated (Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
LinearLayoutManager linear = new LinearLayoutManager(this.getActivity());
linear.setOrientation(LinearLayoutManager.VERTICAL);
rcc_lista_atletas.setLayoutManager(linear);
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// do your variables initialisations here except Views!!!
data();
iniciar_adaptador_atletas();
}
public void onViewCreated(View view, Bundle savedInstanceState){
super.onViewCreated(view, savedInstanceState);
}
public void data(){
lista_atl = new ArrayList<>();
lista_atl.add(new lista_atletas("Astrid Ruvalcaba Ramos", "Esgrima"));
lista_atl.add(new lista_atletas("Daniel Sanchez Cuevas", "G. Artistica"));
lista_atl.add(new lista_atletas("Alexa Luna Contreras", "TKD"));
lista_atl.add(new lista_atletas("Paul Carillo Mendez", "Natacion"));
lista_atl.add(new lista_atletas("Karen Mendoza Galindo", "Boxeo"));
lista_atl.add(new lista_atletas("Marco Torres Miranda", "Tiro con arco"));
}
public void iniciar_adaptador_atletas(){
adaptador_lista_atletas = new lista_atletas_adaptador(lista_atl);
rcc_lista_atletas.setAdapter(adaptador_lista_atletas);
}
提前致谢
编辑:我刚搬家
data();
iniciar_adaptador_atletas();
贝娄
rcc_lista_atletas.setLayoutManager(linear);
在 onCreateView 所以我有这个
public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_administrador_atletas, container, false);
rcc_lista_atletas = (RecyclerView)view.findViewById(R.id.recycler_administrador_atletas);
LinearLayoutManager linear = new LinearLayoutManager(this.getActivity());
linear.setOrientation(LinearLayoutManager.VERTICAL);
rcc_lista_atletas.setLayoutManager(linear);
data();
iniciar_adaptador_atletas();
return view;
}
它有效,现在我可以用我的数据输入片段
非常感谢大家,您的信息非常有用!
解决方案
正如错误消息所说,您正在对一个空值变量(可能是 rcc_lista_atletas)调用方法 setAdapter。虽然错误并不完全在您发布的源代码中(您应该使用完整代码更新您的帖子),但我想其中一种方法data () 或iniciar_adaptador_atletas () 正在调用“setAdapter”。
您必须记住onCreate在onCreateView之前执行。因此,您可能在执行 onCreateView 之前调用了 setAdapter,并且这样做, rcc_lista_atletas 仍然为空。将data () 和iniciar_adaptador_atletas () 移动到“return view;”之前的行 在onCreateView并再次测试它。
这是我们可以在不检查完整代码的情况下做到的最好的事情。
推荐阅读
- android - 如何解决flutter配置冲突?
- swiftui - 质疑 SwiftUI 中 Spacers 的动态性
- flutter - Flutter web:如何将资产重定向到其他域?
- typescript - TypeScript - 输入函数的最佳方法?
- javascript - 使用 MathJax 显示非内联数学
- java - 用户在java模式问题中输入行数和起始编号
- django - 如何使用 Django 框架显示帖子的详细信息及其评论?
- javascript - 有没有办法在 JS 中过滤具有特定数量返回项目的数组?
- c - 使用 C SDK 连接到 Couchbase 服务器
- c - 暂定定义具有从未完成的“struct drand48_data”类型