reclyclerview исчезает при переключении фрагмента - PullRequest
0 голосов
/ 21 марта 2019

У меня есть навигационный вид снизу с 3 вариантами и фрагментами.

когда я перехожу к фрагменту, у которого есть tabLayout с представлением переработчика внутри, первый раз список загружается правильно, однако после изменения фрагмента и возврата к списку список не отображается.

код:
Фрагмент RecyclerView.

public class CadastroContaPatrimonialFragment extends Fragment {

@BindView(R.id.recyclerView_conta_patrimonial)
public RecyclerView recyclerViewContaPatrimonial;

private CadastroContaPatrimonialAdapter adapter;
private List<ContaPatrimonial> listaContas;


public static CadastroContaPatrimonialFragment newInstance() {
    CadastroContaPatrimonialFragment fragment = new CadastroContaPatrimonialFragment();
    return fragment;
}

public CadastroContaPatrimonialFragment() {}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_cadastro_conta_patrimonial, container, false);
    ButterKnife.bind(this, view);

    if (this.listaContas == null) {
        configuraRecycler();
    }

    return view;
}

private void configuraRecycler() {

    MainActivity.loading(true);

    LinearLayoutManager manager = new LinearLayoutManager(getContext());
    recyclerViewContaPatrimonial.setLayoutManager(manager);

    ContaPatrimonialDAO contaPatrimonialDAO = PatrimonioDatabase.getInstance(getContext()).criaContaPatrimonialDAO();
    this.listaContas = contaPatrimonialDAO.getAll();
    adapter = new CadastroContaPatrimonialAdapter(this.listaContas);

    recyclerViewContaPatrimonial.setAdapter(adapter);
    recyclerViewContaPatrimonial.addItemDecoration(new DividerItemDecoration(getContext(), DividerItemDecoration.VERTICAL));

    MainActivity.loading(false);
}

}

Адаптер:

public class CadastroContaPatrimonialAdapter extends RecyclerView.Adapter<CadastroContaPatrimonialAdapter.ContaPatrimonialViewHolder> {

List<ContaPatrimonial> contas;

public CadastroContaPatrimonialAdapter(List<ContaPatrimonial> contas) {
    this.contas = contas;
}

@NonNull
@Override
public ContaPatrimonialViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    return new ContaPatrimonialViewHolder(LayoutInflater.from(parent.getContext())
           .inflate(R.layout.conta_patrimonial_item_recycler, parent, false));
}

@Override
public void onBindViewHolder(@NonNull ContaPatrimonialViewHolder holder, int position) {
    holder.txtContaDescricao.setText(contas.get(position).getDescricao());
}

@Override
public int getItemCount() {
    return contas != null ? contas.size() : 0;
}

/* VIEW HOLDER */
public class ContaPatrimonialViewHolder extends RecyclerView.ViewHolder {

    @BindView(R.id.item_conta_patr_descricao)
    public TextView txtContaDescricao;

    public ContaPatrimonialViewHolder(@NonNull View itemView) {
        super(itemView);
        ButterKnife.bind(this, itemView);
    }
}

}

Переключение фрагментов:

private void trocaFragment(Fragment fragment, boolean backStack) {
    FragmentManager fm = getSupportFragmentManager();
    FragmentTransaction tx = fm.beginTransaction();
    tx.replace(R.id.main_frame, fragment);
    if (backStack) {
        tx.addToBackStack(null);
    }
    tx.commit();
}

1 Ответ

0 голосов
/ 21 марта 2019

Ваш RecyclerView не исчезает, когда фрагмент переключается обратно, он просто не отображается правильно, как ожидалось. Когда фрагмент переключается обратно с FragmentTransaction.replace, он снова вызывает Fragment.onCreateView, потому что представление было уничтожено. И в вашем случае вы пропускаете настройку RecyclerView, потому что listaContas был инициализирован ранее. Чтобы исправить это, вы должны удалить if (this.listaContas == null) условие:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragment_cadastro_conta_patrimonial, container, false);
}

@Override public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    ButterKnife.bind(this, view);
    configuraRecycler();
}
...