我想传递我在One片段中创建的整个实体(Incidencia)并将其传递给另一个片段,该片段将显示之前添加的每个实体的列表。两个片段都在一个Activity内。我使用recyclerview列出实体,这个实体实现了parcelable。
这是包含两个片段的主要活动
public class MainActivity extends ActionBarActivity implements IngresoIncidenciaTroncalFragment.OnButtonClickedListener{
DrawerLayout mDrawerLayout;
NavigationView mNavigationView;
FragmentManager mFragmentManager;
FragmentTransaction mFragmentTransaction;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Toolbar mitoolbar = (Toolbar) findViewById(R.id.toolbar);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
mNavigationView = (NavigationView) findViewById(R.id.shitstuff) ;
setSupportActionBar(mitoolbar);
mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
mDrawerLayout.closeDrawers();
if (menuItem.getItemId() == R.id.nav_item_ingresoIncidencia) {
FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.containerView,new IngresoIncidenciaTroncalFragment()).commit();
mitoolbar.setTitle("Ingreso Incidencia Troncal");
}
else if (menuItem.getItemId() == R.id.nav_item_listarIncidencia) {
FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.containerView,new ListaIncidenciasTroncalFragment()).commit();
mitoolbar.setTitle("Lista Incidencias Troncal");
}
return false;
}
});
android.support.v7.widget.Toolbar toolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.toolbar);
ActionBarDrawerToggle mDrawerToggle = new ActionBarDrawerToggle(this,mDrawerLayout, toolbar,R.string.app_name,
R.string.app_name);
mDrawerLayout.setDrawerListener(mDrawerToggle);
mDrawerToggle.syncState();
}
//THIS IS THE METHOD WHO DOESNT WORK
//WHAT CONTAINER DO I HAVE TO WRITE? THE ACTIVITY CONTAINER? OR FRAGMENT ONE OR TWO CONTAINERS?
@Override
public void onButtonClicked(Incidencia incidencia){
IngresoIncidenciaTroncalFragment fragment = new IngresoIncidenciaTroncalFragment();
Bundle args = new Bundle();
args.putParcelable("incident", incidencia);
fragment.setArguments(args);
getSupportFragmentManager().beginTransaction().replace(R.id.containerView, fragment).commit();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item){
int id = item.getItemId();
return super.onOptionsItemSelected(item);
}
}
这是将添加实体的片段
public class IngresoIncidenciaTroncalFragment extends Fragment implements
FechaDialog.DatePickerDialogFragmentEvents,HoraDialog.TimePickerDialogFragmentEvents ,FechaLlegadaDialog.DateLlegadaPickerDialogFragmentEvents{
private TextView mDateDisplay;
private TextView mTimeDisplay;
private Button botonAgregaIncidencia;
Context context;
private OnButtonClickedListener mListener;
private Spinner spinnerFallas;
public interface OnButtonClickedListener {
void onButtonClicked(Incidencia incidencia);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
/**
*Inflate ingresoincidenciastroncal and setup Views.
*/
final View x = inflater.inflate(R.layout.ingresoincidenciastroncal,null);
context = x.getContext();
mHoraLLegadaEstacion=(TextView)x.findViewById(R.id.tvHoraLLegadaEstacion);
mObservaciones=(TextView)x.findViewById(R.id.tvObservaciones);
mFechaSolucion=(TextView)x.findViewById(R.id.tvFechaSolucion);
mHoraSolucion=(TextView)x.findViewById(R.id.tvHoraSolucion);
//ADD ENTITY BUTTON
botonAgregaIncidencia=(Button) x.findViewById(R.id.btnAgregarIncidencia);
botonAgregaIncidencia.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//CREATING NEW ENTITY(Incidencia)
Incidencia incidencia = new Incidencia();
incidencia.setFechaRegistro(mDateDisplay.toString());
incidencia.setHoraSolucion(mTimeDisplay.toString());
incidencia.setTipoFalla(spinnerFallas.getPrompt().toString());
//NEW ENTITY AS PAREMETER
mListener.onButtonClicked(incidencia);
}
});
return x;
}
}
这是将显示实体列表的片段
public class ListaIncidenciasTroncalFragment extends Fragment {
Context context;
GestureDetector detector;
private RecyclerView rvListaIncidencias;
private ListaIncidenciasTroncalAdapter mlistaIncidenciasTroncalAdapter;
public ListaIncidenciasTroncalFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View x = inflater.inflate(R.layout.listaincidenciastroncalfragment,null);
context = x.getContext();
detector = new GestureDetector(getActivity(), new RecyclerViewOnGestureListener());
rvListaIncidencias=(RecyclerView)x.findViewById(R.id.rv_listaIncidenciasTroncal);
rvListaIncidencias.setLayoutManager(new LinearLayoutManager(getContext()));
mlistaIncidenciasTroncalAdapter = new ListaIncidenciasTroncalAdapter();
rvListaIncidencias.setAdapter(mlistaIncidenciasTroncalAdapter);
//HERE I SUPPOSE TO GET OBJECT CREATED FROM FRAGMENTONE
Bundle args = getArguments();
Incidencia incidencia = args.getParcelable("incident");
mlistaIncidenciasTroncalAdapter.add(incidencia);
return x;
}
}
这是recyclerview适配器
public class ListaIncidenciasTroncalAdapter extends RecyclerView.Adapter<ListaIncidenciasTroncalAdapter.ListaIncidenciasTroncalAdapterViewHolder>
{
private List<Incidencia> mLstIncidencia = new ArrayList<>();
//private OnItemClickListener listener;
public void add(Incidencia incidencia){
mLstIncidencia.add(incidencia);
notifyItemInserted(mLstIncidencia.size()-1);
}
@Override
public ListaIncidenciasTroncalAdapter.ListaIncidenciasTroncalAdapterViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.listaincidencias_item,parent,false);
ListaIncidenciasTroncalAdapterViewHolder mlistaIncidenciasTroncalAdapterViewHolder = new ListaIncidenciasTroncalAdapterViewHolder(view);
return mlistaIncidenciasTroncalAdapterViewHolder;
}
@Override
public void onBindViewHolder(ListaIncidenciasTroncalAdapter.ListaIncidenciasTroncalAdapterViewHolder holder, final int position) {
final Incidencia incidencia= mLstIncidencia.get(position);
holder.tv_FechaRegistro.setText("Registro: "+incidencia.getFechaRegistro()+" - "+incidencia.getHoraRegistro());
holder.tv_Falla.setText(incidencia.getTipoFalla());
holder.tv_Estacion.setText(incidencia.getNomEstacion());
holder.tv_FechaSolucion.setText("Solucion: "+incidencia.getFechaSolucion()+" - "+incidencia.getHoraSolucion());
}
@Override
public int getItemCount() {
return mLstIncidencia.size();
}
static class ListaIncidenciasTroncalAdapterViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
//private OnItemClickListener listener;
TextView tv_FechaRegistro, tv_Falla, tv_Estacion,tv_FechaSolucion;
LinearLayout linearLayout;
public DetalleIncidencia detalleincidencia;
public ListaIncidenciasTroncalAdapterViewHolder(View itemView) {
super(itemView);
tv_FechaRegistro= (TextView) itemView.findViewById(R.id.tvRegistro);
tv_Falla= (TextView) itemView.findViewById(R.id.tvFalla);
tv_Estacion= (TextView) itemView.findViewById(R.id.tvEstacion);
tv_FechaSolucion= (TextView) itemView.findViewById(R.id.tvSolucion);
final Context context = itemView.getContext();
//detalleincidencia=(DetalleIncidencia) itemView.findViewById(R.id.)
linearLayout=(LinearLayout) itemView.findViewById(R.id.linearItem);
}
@Override
public void onClick(View v) {
int pos = getAdapterPosition();
}
}}
最后这是实体(Incidencia)
public class Incidencia implements Parcelable {
private Integer id_incidencia;
private String FechaRegistroIncidencia;
private String NomRegistro;
private String FechaRegistro;;
private String HoraRegistro;
private int CodEstacion;
private String NomEstacion;
private int CodEquipo;
private String NomEquipo;
private String TipoFalla;
private int AtoramientoMoneda;
private int AtoramientoBillete;
private String HoraLlegadaEstacion;
private String Estado;
private String Observaciones;
private String FechaSolucion;
private String HoraSolucion;
public Integer getId_incidencia() {
return id_incidencia;
}
public void setId_incidencia(Integer id_incidencia) {
this.id_incidencia = id_incidencia;
}
public String getFechaRegistroIncidencia() {
return FechaRegistroIncidencia;
}
public void setFechaRegistroIncidencia(String fechaRegistroIncidencia) {
FechaRegistroIncidencia = fechaRegistroIncidencia;
}
public String getNomRegistro() {
return NomRegistro;
}
public void setNomRegistro(String nomRegistro) {
NomRegistro = nomRegistro;
}
public String getFechaRegistro() {
return FechaRegistro;
}
public void setFechaRegistro(String fechaRegistro) {
FechaRegistro = fechaRegistro;
}
public String getHoraRegistro() {
return HoraRegistro;
}
public void setHoraRegistro(String horaRegistro) {
HoraRegistro = horaRegistro;
}
public Integer getCodEstacion() {
return CodEstacion;
}
public void setCodEstacion(Integer codEstacion) {
CodEstacion = codEstacion;
}
public String getNomEstacion() {
return NomEstacion;
}
public void setNomEstacion(String nomEstacion) {
NomEstacion = nomEstacion;
}
public Integer getCodEquipo() {
return CodEquipo;
}
public void setCodEquipo(Integer codEquipo) {
CodEquipo = codEquipo;
}
public String getNomEquipo() {
return NomEquipo;
}
public void setNomEquipo(String nomEquipo) {
NomEquipo = nomEquipo;
}
public String getTipoFalla() {
return TipoFalla;
}
public void setTipoFalla(String tipoFalla) {
TipoFalla = tipoFalla;
}
public Integer getAtoramientoMoneda() {
return AtoramientoMoneda;
}
public void setAtoramientoMoneda(Integer atoramientoMoneda) {
AtoramientoMoneda = atoramientoMoneda;
}
public Integer getAtoramientoBillete() {
return AtoramientoBillete;
}
public void setAtoramientoBillete(Integer atoramientoBillete) {
AtoramientoBillete = atoramientoBillete;
}
public String getHoraLlegadaEstacion() {
return HoraLlegadaEstacion;
}
public void setHoraLlegadaEstacion(String horaLlegadaEstacion) {
HoraLlegadaEstacion = horaLlegadaEstacion;
}
public String getEstado() {
return Estado;
}
public void setEstado(String estado) {
Estado = estado;
}
public String getObservaciones() {
return Observaciones;
}
public void setObservaciones(String observaciones) {
Observaciones = observaciones;
}
public String getFechaSolucion() {
return FechaSolucion;
}
public void setFechaSolucion(String fechaSolucion) {
FechaSolucion = fechaSolucion;
}
public String getHoraSolucion() {
return HoraSolucion;
}
public void setHoraSolucion(String horaSolucion) {
HoraSolucion = horaSolucion;
}
public Incidencia(){}
protected Incidencia(Parcel in){
this.id_incidencia=in.readInt();;
this.FechaRegistroIncidencia=in.readString();
this.NomRegistro=in.readString();
this.FechaRegistro=in.readString();
this.HoraRegistro=in.readString();
this.CodEstacion=in.readInt();
this.NomEstacion=in.readString();
this.CodEquipo=in.readInt();
this.NomEquipo=in.readString();
this.TipoFalla=in.readString();
this.AtoramientoMoneda=in.readInt();
this.AtoramientoBillete=in.readInt();
this.HoraLlegadaEstacion=in.readString();
this.Estado=in.readString();
this.Observaciones=in.readString();
this.FechaSolucion=in.readString();
this.HoraSolucion=in.readString();
}
public static final Parcelable.Creator<Incidencia> CREATOR = new Parcelable.Creator<Incidencia>() {
@Override
public Incidencia createFromParcel(Parcel source) {
return new Incidencia(source);
}
@Override
public Incidencia[] newArray(int size) {
return new Incidencia[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.FechaRegistro);
dest.writeString(this.HoraRegistro);
dest.writeString(this.TipoFalla);
dest.writeString(this.FechaSolucion);
dest.writeString(this.HoraSolucion);
dest.writeString(this.NomEstacion);
}
}
答案 0 :(得分:1)
如果一个Activity
中的两个片段都可以使用FragmentManager#findFragmentByTag(String)或FragmentManager#findFragmentById(int id)来获取其他片段实例,只需在该片段上调用一些公共方法来设置实体。
请注意,在添加此片段时,您应该使用某个标记或某个容器ID,以便能够获取它们。
答案 1 :(得分:1)
你把parcelable放在这里
IngresoIncidenciaTroncalFragment fragment = new IngresoIncidenciaTroncalFragment();
Bundle args = new Bundle();
args.putParcelable("incident", incidencia);
但在IngresoIncidenciaTroncalFragment
内,你从来没有得过它们。
另外,请务必检查参数的可为空性。
Bundle args = getArguments();
if (args != null) {
Incidencia incidencia = args.getParcelable("incident");
} else {
Log.w("GetIncidencia", "Arguments expected, but missing");
}
此外,您遗漏了writeToParcel
中被读入Incidencia(Parcel in)
的许多字段,其中第一个字段不匹配,其余字段无序。
如果要在片段之间传递数据,请参阅
答案 2 :(得分:0)
尝试像这样更新片段
public class IngresoIncidenciaTroncalFragment extends Fragment implements
FechaDialog.DatePickerDialogFragmentEvents,HoraDialog.TimePickerDialogFragmentEvents ,FechaLlegadaDialog.DateLlegadaPickerDialogFragmentEvents{
private TextView mDateDisplay;
private TextView mTimeDisplay;
private Button botonAgregaIncidencia;
Context context;
private OnButtonClickedListener mListener;
private Spinner spinnerFallas;
public interface OnButtonClickedListener {
void onButtonClicked(Incidencia incidencia);
}
@Override
public void onAttach(Context context) {
if (context instanceOf OnButtonClickedListener) {
mListener = (OnButtonClickedListener) context;
}
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
/**
*Inflate ingresoincidenciastroncal and setup Views.
*/
final View x = inflater.inflate(R.layout.ingresoincidenciastroncal,null);
context = x.getContext();
mHoraLLegadaEstacion=(TextView)x.findViewById(R.id.tvHoraLLegadaEstacion);
mObservaciones=(TextView)x.findViewById(R.id.tvObservaciones);
mFechaSolucion=(TextView)x.findViewById(R.id.tvFechaSolucion);
mHoraSolucion=(TextView)x.findViewById(R.id.tvHoraSolucion);
//ADD ENTITY BUTTON
botonAgregaIncidencia=(Button) x.findViewById(R.id.btnAgregarIncidencia);
botonAgregaIncidencia.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//CREATING NEW ENTITY(Incidencia)
Incidencia incidencia = new Incidencia();
incidencia.setFechaRegistro(mDateDisplay.toString());
incidencia.setHoraSolucion(mTimeDisplay.toString());
incidencia.setTipoFalla(spinnerFallas.getPrompt().toString());
//NEW ENTITY AS PAREMETER
if (mListener != null) {
mListener.onButtonClicked(incidencia);
}
}
});
return x;
}
}