【发布时间】:2019-03-21 02:00:00
【问题描述】:
我有一个底部导航视图,其中包含 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();
}
【问题讨论】:
-
覆盖片段的
onResume()方法并从该方法调用configuraRecycler()。 -
我已经试过了,但还是不行。我在onResume()中放了一个logd,但是返回这个fragment的时候好像没有经过这个函数
-
一个重要的信息是这个tablayout在一个fragment中,它在另一个fragment中。示例:我有bottomNavView,每个选项都是一个fragment,在这个fragment中还有另一个fragment包含recycler view。
标签: android android-fragments android-recyclerview android-tablayout