передать сериализованные объекты во фрагмент - PullRequest
0 голосов
/ 23 сентября 2018

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

действие A -> действие B -> фрагмент -> адаптер -> действие

действие A: место, куда я отправляю данные иЯ уже проверял это, и они получают право на операцию B

 public void actualizarVista(DataBaseDTO dataBaseDTO){

        if (dataBaseDTO.getEntidad() != null && dataBaseDTO.getOperacion().equals(EnumOperaciones.CONSULTAR_ESTUDIANTE_CEDULA.getOperacion()))
        {
            Intent intent = new Intent();
            intent.setClass(this, MenuActivity.class);

            Estudiante datosest = (Estudiante) dataBaseDTO.getEntidad();

            Bundle bundle = new Bundle();
            bundle.putSerializable("Estudiante", datosest);
            intent.putExtras(bundle);
            startActivity(intent);
            finish();

        }else if (dataBaseDTO.getEntidad() != null && dataBaseDTO.getOperacion().equals(EnumOperaciones.CONSULTAR_PROFESOR_CEDULA.getOperacion())){

            Intent intent = new Intent();
            intent.setClass(this, Menu_profesor.class);

            Profesor datosprof = (Profesor) dataBaseDTO.getEntidad();

            Bundle bundle = new Bundle();
            bundle.putSerializable("Profesor", datosprof);
            intent.putExtras(bundle);
            startActivity(intent);
            finish();

        }else{
            notificar(dataBaseDTO);
        }    
    }

Деятельность B:

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_menu);

        setTitle("Profesores disponibles");
        Toolbar toolbar =  findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        Bundle  datos = getIntent().getExtras();
        estu = (Estudiante) datos.getSerializable("Estudiante");

        DrawerLayout drawer =  findViewById(R.id.drawer_layout);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);

        drawer.addDrawerListener(toggle);
        toggle.syncState();

        NavigationView navigationView = findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);
        View headerView = navigationView.getHeaderView(0);
        nombreNav =  headerView.findViewById(R.id.lbNombreNav);
        correoNav = headerView.findViewById(R.id.navCorreoEst);

        nombreNav.setText(estu.getNombre());
        correoNav.setText(estu.getCorreo());

        Fragment listarProfesorFragment = new ListarProfesorFragment();

        listarProfesorFragment.setArguments(datos);

        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.add(R.id.contenidomenuestudiante, new ListarProfesorFragment());
        fragmentTransaction.commit();    
    }

Фрагмент:

public View onCreateView(LayoutInflater inflater, ViewGroup viewGroup, Bundle bundle) {
    View viewListarProfesores = inflater.inflate(R.layout.fragment_menuest_inicial, viewGroup, false);
    listprofesores = viewListarProfesores.findViewById(R.id.listProfesor);

      Bundle data = this.getArguments();
     objetoEstudiante = (Estudiante) data.getSerializable("Estudiante");

     Log.e("ERROR", "" + data);

    return viewListarProfesores;
}

Когда я получаю доступ к данным вфрагмент, я получаю ошибку, данные нулевые.Я не знаю, как правильно это сделать.

Большое спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 23 сентября 2018

Шаг 1: Реализуйте Serializable в вашей модели Класс как этот

public class Estudiante implements Serializable{

}

Чтобы получить Serializable во фрагменте, вы должны сделать это следующим образом.объект для фрагмента просто сделать это

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.replace(R.id.container, BlankFragment.newInstance(new Estudiante()));
        transaction.commit();
0 голосов
/ 23 сентября 2018

вы можете изменить свой метод,
в последовательности заказов, передать его в качестве параметра к фрагменту
, в вашем методе newInstance вашего фрагмента добавить параметр, подобный этому

public static ListarProfesorFragment newInstance(Estudiante estu){
    ...
    objetoEstudiante = estu;
    // and here you have access to it ;-)
}

создать метод newInstance вваш фрагмент, как указано выше, затем в вашей деятельности назовите его

estu = (Estudiante) datos.getSerializable("Estudiante");
Fragment listarProfesorFragment = ListarProfesorFragment.newInstance(estu);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...