Enviar dados para fragmentar depois é inicializado

Mirko:

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();
        }

    }
Hriadesh:

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.javacomo 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 changingDataListenere implementsque em sua Fragmento e chamar o retorno de chamada de Atividade

plano C (avançada)

Use RxJava com PublishSubjectvocê 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!

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=210985&siteId=1
Recomendado
Clasificación