首页 > 解决方案 > 如何使用 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;
}

它有效,现在我可以用我的数据输入片段

非常感谢大家,您的信息非常有用!

标签: androidandroid-fragmentsandroid-recyclerviewnullpointerexceptionruntime-error

解决方案


正如错误消息所说,您正在对一个空值变量(可能是 rcc_lista_atletas)调用方法 setAdapter。虽然错误并不完全在您发布的源代码中(您应该使用完整代码更新您的帖子),但我想其中一种方法data () 或iniciar_adaptador_atletas () 正在调用“setAdapter”。

您必须记住onCreate在onCreateView之前执行。因此,您可能在执行 onCreateView 之前调用了 setAdapter,并且这样做, rcc_lista_atletas 仍然为空。将data () 和iniciar_adaptador_atletas () 移动到“return view;”之前的行 在onCreateView并再次测试它。

这是我们可以在不检查完整代码的情况下做到的最好的事情。


推荐阅读