我需要通过多个活动,适配器和片段来发送对象以加载信息。 带有信息的对象导航将像这样:
活动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;
}
当我访问片段中的数据时,出现错误,数据为空。我不知道正确的方法。
非常感谢您的帮助。
答案 0 :(得分:2)
第1步:在模型类中实现序列化 像这样
public class Estudiante implements Serializable{
}
要在Fragment中获得可序列化,您必须这样做。.
public class BlankFragment extends Fragment {
private static final String ARG_PARAM1 = "obj";
private Estudiante object;
public BlankFragment() {
}
public static BlankFragment newInstance(Estudiante param1) {
BlankFragment fragment = new BlankFragment();
Bundle args = new Bundle();
args.putSerializable(ARG_PARAM1, param1);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
object = (Estudiante) getArguments().getSerializable(ARG_PARAM1);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view= inflater.inflate(R.layout.fragment_blank, container, false);
// Use object
return view;
}
}
步骤:3在将对象传递到片段时只需执行此操作
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.container, BlankFragment.newInstance(new Estudiante()));
transaction.commit();
答案 1 :(得分:0)
您可以更改方法,
将订单束作为参数传递给fragment
在片段的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);