【问题标题】:Add data to Arraylist Object from fragment从片段向 Arraylist 对象添加数据
【发布时间】:2017-06-07 16:37:25
【问题描述】:

我需要一个指南来从我的片段的添加按钮添加数据并在另一个片段中显示列表..内存中的所有内容

这是我的实体

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);

    }

}

这是我的适配器

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();

            }

        }

    public void setOnItemClickListener(OnItemClickListener listener){
        this.listener = listener;
    }

    public interface OnItemClickListener{
        public void onItemClick(String textName, String textViewBrief);
    }


    }

我想从这个片段中添加一个事件对象

    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();




            //BOTON DE AGREGAR INCIDENCIA
            botonAgregaIncidencia=(Button) x.findViewById(R.id.btnAgregarIncidencia);
            botonAgregaIncidencia.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    Incidencia incidencia = new Incidencia();
                    incidencia.setFechaRegistro(mDateDisplay.getText().toString());
                    incidencia.setHoraSolucion(mTimeDisplay.getText().toString());




                    Toast toast = Toast.makeText(getContext(), "Registrado", Toast.LENGTH_SHORT);
                    toast.show();

                }
            });
return x;
}

我想看看这个片段中的列表

public class ListaIncidenciasTroncalFragment extends Fragment {

    Context context;


    GestureDetector detector;


    private RecyclerView rvListaIncidencias;
    private ListaIncidenciasTroncalAdapter mlistaIncidenciasTroncalAdapter;

    public ListaIncidenciasTroncalFragment() {
        // Required empty public constructor
    }


    @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);

  //I ADD THIS ONE FOR TEST AND ITS SUCCESFULL BUT I DONT KNOW HOW TO ADD IT BY THE BUTTON IN ANOTHER FRAGMENT
  Incidencia incidencia = new Incidencia();
        incidencia.setFechaRegistro("06/06/2017");
        incidencia.setHoraRegistro("10:30");
        incidencia.setTipoFalla("Atasco Moneda");
        incidencia.setNomEstacion("Javier Prado");
        incidencia.setFechaSolucion("07/06/2017");
        incidencia.setHoraSolucion("9:20");
        mlistaIncidenciasTroncalAdapter.add(incidencia);

return x;
}

【问题讨论】:

  • 两个 Fragment 是否附加到同一个 Activity?如果是这样,您不需要实现 Parcelable 接口(除非您在活动/流程之间移动对象)。而是通过托管活动使用接口。最好还是使用 rxjava 来获取对 Fragment 的 Observable Fragment 的引用并在您的 Fragment 中订阅它。
  • 是的,两者都在同一个活动中,我将在活动之间移动数据。如何从我的 onClicklistener 按钮添加事件并在另一个片段中显示列表

标签: android android-studio object android-fragments android-recyclerview


【解决方案1】:

在您的第一个片段中,定义一个接口,它将您的 Incidencia 对象传递给主机活动。接口方法在你按钮的onClick()中调用:

public class YourFirstFragment extends Fragment {
    private OnButtonClickedListener mListener;

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        ...
        botonAgregaIncidencia.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ...
                mListener.onButtonClicked(incidencia);
            }
        });
    }

    public interface OnButtonClickedListener {
        void onButtonClicked(Incidencia incidencia);
    }
}

然后,在您的活动中,实现此接口。被覆盖的方法还将捆绑对象并作为片段参数传递给您的下一个片段:

public class YourActivity implements YourFirstFragment.OnButtonClicked {
    .
    .
    .
    @Override
    public void onButtonClicked(Incidencia incidencia){
        ListaIncidenciasTroncalFragment fragment = new ListaIncidenciasTroncalFragment();
        Bundle args = new Bundle();
        args.putParcelable("yourKey", incindencia);
        fragement.setArguments(args);
        getSupportFragmentManager().beginTransaction().replace(R.id.yourFragmentContainer, fragment).commit();
    }
}

最后,在您的第二个片段中,像这样提取包或参数,然后随意使用它:

Bundle args = getArguments();
Incidencia incidencia = args.getParcelable("yourKey");

【讨论】:

  • 我做到了,但 onCreateView 出现错误,当我转到 ListaIncidenciasTroncalFragment 时,应用程序掉了。在“yourfragmentContainer”的情况下,它必须是主要 LinearLayout 的 id 或必须是 recyclerview id。,在 layoutlistasincidencias 或 layoutincidenciasitem 内部??
  • 它必须是您设置片段的活动的父布局中的视图 ID(通常是 FrameLayout)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-13
  • 2016-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多