Em modo retrato, ao selecionar a matéria, dá erro e não abre a tela de detalhes da prova selecionada. Verifiquei que no ProvasActivity ao executar o comando parametros.putSerializable("prova", prova) está adicionando a prova corretamente. No DetalhesProvaFragment ao executar Bundle parametros = getArguments(), parametros é diferente de null, mas ao executar Prova prova = (Prova) parametros.getSerializable("prova"), prova está ficando = null. Por quê?
public class DetalhesProvaFragment extends Fragment {
private TextView campoMateria;
private TextView campoData;
private ListView listaTopicos;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_detalhes_prova, container, false);
campoMateria = (TextView) view.findViewById(R.id.detalhes_prova_materia);
campoData = (TextView) view.findViewById(R.id.detalhes_prova_data);
listaTopicos = (ListView) view.findViewById(R.id.detalhes_prova_topicos);
Bundle parametros = getArguments();
if (parametros != null) {
Prova prova = (Prova) parametros.getSerializable("prova"); => prova está ficando igual a null
populaCamposCom(prova); => ao chamar populaCamposCom, dá erro, pois prova igual a null
}
return view;
}
public void populaCamposCom(Prova prova) {
campoMateria.setText(prova.getMateria());
campoData.setText(prova.getData());
ArrayAdapter<String> adapterTopicos =
new ArrayAdapter<String>(getContext(), android.R.layout.simple_list_item_1, prova.getTopicos());
listaTopicos.setAdapter(adapterTopicos);
}
}
Agora precisamos modificar a ProvasActivity para tratar os dois casos possíveis:
public class ProvasActivity extends AppCompatActivity {
public void selecionaProva(Prova prova) {
FragmentManager manager = getSupportFragmentManager();
if (!estaNoModoPaisagem()) {
FragmentTransaction tx = manager.beginTransaction();
DetalhesProvaFragment detalhesFragment = new DetalhesProvaFragment();
Bundle parametros = new Bundle();
parametros.putSerializable("prova", prova);
detalhesFragment.setArguments(parametros);
tx.replace(R.id.frame_principal, detalhesFragment);
tx.commit();
} else {
DetalhesProvaFragment detalhesFragment =
(DetalhesProvaFragment) manager.findFragmentById(R.id.frame_secundario);
detalhesFragment.populaCamposCom(prova);
}
}
}