Pregunta Fragmentos de la herencia de Android.


¿Es posible / recomendable dejar que diferentes fragmentos se hereden unos de otros en Android?

¿Cuál sería la mejor manera de inicializar cosas que ya están inicializadas en la superclase y agregarle cosas? (-> por ejemplo, como las subclases normales que usan super () en su constructor y luego inicializando otros objetos)

Busqué en internet pero no encontré mucha información sobre esto. Sé que es posible volver a super.onCreateView () pero no puedes inicializar otros objetos / vistas después de eso ...

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState)
    {

    super.onCreateView()???


    //initialize other objects here

    //you have to return a view ...
}

5
2017-09-25 22:22


origen


Respuestas:


Sí, está permitido. Por qué no? Por ejemplo, si tiene un número de Fragmentos, que muestran listas, puede poner todos los métodos comunes en FragmentList y luego heredar otros fragmentos, agregando solo métodos únicos o anulando los de super si es necesario.

Pero anulando onCreateView() podría generar dificultades en el manejo de diseños. En mi proyecto reciente, en cambio, creé un método inflateFragment() en la super clase de la siguiente manera:

BaseFragment.java

protected View inflateFragment(int resId, LayoutInflater inflater, ViewGroup container) {
    View view = inflater.inflate(resId, container, false);
    FrameLayout layout = (FrameLayout)view.findViewById(R.id.fragment_layout);
    /*
     *  Inflate shared layouts here
     */
    . . .
    setHasOptionsMenu(true);
    return view;
}

Debido a la estructura, todos y cada uno de los recursos de diseño de fragmentos se envuelven en un FrameLayout con id = fragment_layout. Pero eres libre de usar LinearLayout o la vista principal que necesites.

Y luego en fragmentos heredados:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflateFragment(R.layout.my_fragment, inflater, container);
    /*
     *  Do things related to this fragment
     */
    ...
    return view;
}


12
2017-09-25 22:56