Как правильно добавить код во фрагмент с представлением Recycler в XML? - PullRequest
0 голосов
/ 21 октября 2018

У меня есть только 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;
}

И это сработало, теперь я могу ввести фрагмент со своими данными

Большое спасибо всем, ваша информация была очень полезной!

Ответы [ 2 ]

0 голосов
/ 21 октября 2018

Кажется, вы пытаетесь подключить адаптер к recyclerView до того, как создали recyclerView.Итак, попробуйте переместить iniciar_adaptador_atletas(); вниз

rcc_lista_atletas = (RecyclerView)view.findViewById(R.id.recycler_administrador_atletas);
0 голосов
/ 21 октября 2018

Как говорится в сообщении об ошибке, вы вызываете метод setAdapter для переменной с нулевым значением (вероятно, rcc_lista_atletas).Хотя ошибка не совсем в исходном коде, который вы опубликовали (вы должны обновить свой пост с полным кодом), я полагаю, один из методов, data () или iniciar_adaptador_atletas (), вызывает 'setAdapter'.

Вы должны помнить, что onCreate выполняется до onCreateView .Итак, вы, вероятно, вызываете setAdapter перед выполнением onCreateView, и при этом rcc_lista_atletas по-прежнему равен нулю.Переместите data () и iniciar_adaptador_atletas () в строку перед «возвратом вида»;в onCreateView и протестируйте его снова.

Это лучшее, что мы можем сделать, не проверив полный код.

...