Eu tenho problema quando eu enviar dados para guia inicializado. No método getData()
I recebeu adaptador é nulo e é também recyclerview nulo.
TabOne one = new TabOne()
one.getData(populatedList)
O erro é next =>
java.lang.NullPointerException: Attempt to invoke virtual method 'void OneAdapter.setData(java.util.List)' on a null object reference.
É talvez melhor ideia para enviar dados através de pacote no fragmento ou talvez qualquer outra ideia.
Liguei getData()
becuse aqui é resposta da API.
public class TabOne extends Fragment {
private Unbinder unbinder;
@BindView(R.id.fab)
FloatingActionButton floatingActionButton;
@BindView(R.id.recycler_view_recycler)
RecyclerView recyclerView;
private OneAdapter oneAdapter;
private List<Response> response = new ArrayList<>();
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.tab_one, container, false);
unbinder = ButterKnife.bind(this, view);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
oneAdapter = new OneAdapter(getContext(), response);
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setAdapter(oneAdapter);
return view;
}
public void getData(List<Response> response){
oneAdapter.setData(response);
}
@Override
public void onDestroyView() {
super.onDestroyView();
unbinder.unbind();
}
}
Você não pode chamar o método de fragmento de uma outra atividade / Fragmento.
Você tem várias formas para resolver este problema
plano A (sugerido)
Use EventBus biblioteca
1 : Criar EventClass.java
como este
public class EventClass{
private List<FILL IT WITH YOUR OBJECT> populatedList;
public EventClass(int populatedList) {
this.populatedList= populatedList;
}
public int getPopulatedList() {
return populatedList;
}
}
2 : Use-o
em sua atividade, em vez de este
TabOne one = new TabOne()
one.getData(populatedList)
Use EventBus e publicar o seu evento como este
EventBus.getDefault().postSticky(new EventClass(populatedList));
3 Grap seus dados dentro do fragmento. Adicione esta função ao seu Fragmento
@Subscribe
public void onEvent(EventClass event) {
oneAdapter.setData(event.getPopulatedList());
}
4 não se esqueça de registrar e cancelar o registro o seu EventBus em Fragmet
EventBus.getDefault().register(this);//add in onCreateView
//...
EventBus.getDefault().unregister(this);//add in onDestroyView
plano B
Use design de interface para retorno de chamada no fragmento. Você deve criar uma interface para alterar dados como changingDataListener
e implements
que em sua Fragmento e chamar o retorno de chamada de Atividade
plano C (avançada)
Use RxJava com PublishSubject
você pode criar observáveis para observa novos dados e whe novos dados chegam você pode atualizar seu adaptador.
Acredite-me planejar A é mush mais simples!