He usado Tabbed Activity (HomeActivity) con la barra de navegación superior, en mi proyecto de Android. Tiene tres pestañas y he creado tres Fragmentos para esas pestañas. Cuando se crea un fragmento, agrega automáticamente una clase Java a la carpeta del proyecto. Después, he asociado esos fragmentos a cada pestaña de la barra de navegación usando el método onCreateView de la clase de actividad (HomeActivity). Pero cuando ejecuto mi aplicación, aunque haya clases Fragment, no crearán objetos a partir de esas clases.

A continuación se indica el método onCreateView en la clase HomeActivity.

@Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            if (getArguments().getInt(ARG_SECTION_NUMBER)==1) {
                Log.i("TEST", "onCreateView method framgnet 1");
                View rootView = inflater.inflate(R.layout.fragment_home, container, false);
                return rootView;
            }else if (getArguments().getInt(ARG_SECTION_NUMBER)==2) {
                Log.i("TEST", "onCreateView method framgnet 2");
                View rootView = inflater.inflate(R.layout.fragment_transactions, container, false);
                return rootView;
            }else if(getArguments().getInt(ARG_SECTION_NUMBER)==3) {
                Log.i("TEST", "onCreateView method framgnet 3");
                View rootView = inflater.inflate(R.layout.fragment_lendings, container, false);
                return rootView;
            }else {
                View rootView = inflater.inflate(R.layout.fragment_home, container, false);
                return rootView;                                                                            // edit this condition
            }
        }

Cuando creé la actividad con pestañas (HomeActivity), proporcioné automáticamente una actividad con solo el archivo .xml en la carpeta res del proyecto. Pero no proporcionará una clase de Fragmento de Java para ello. Pero cuando intencionalmente creo otros Fragmentos, se crean los archivos .xml y .java. Todavía la clase Java no funciona.

Este es mi método getItem en la clase interna SectionPageAdapter (extiende FragmentPageAdapter).

public Fragment getItem(int position) {
            // getItem is called to instantiate the fragment for the given page.
            // Return a PlaceholderFragment (defined as a static inner class below).
            return PlaceholderFragment.newInstance(position + 1);
        }

Luego cambié ese método de la siguiente manera,

        public Fragment getItem(int position) {
            // getItem is called to instantiate the fragment for the given page.
            // Return a PlaceholderFragment (defined as a static inner class below).
//            return PlaceholderFragment.newInstance(position + 1);
            switch (position) {
                case 0:
                    return Transactions.newInstance("" ,"");
                case 1:
                    return Lendings.newInstance("", "");
                case 2:
                    return Home.newInstance("", "");
            }
            return null;
        }

Soy nuevo en Android. Gracias.

-2
LSampath 15 ene. 2018 a las 04:53

3 respuestas

La mejor respuesta
** case 0:
                    return Transactions.newInstance("" ,"");
                case 1:
                    return Lendings.newInstance("", "");
                case 2:
                    return Home.newInstance("", "");
**

Resultado getArguments (). getInt (ARG_SECTION_NUMBER) = nulo. Y volveremos

** else {
                View rootView = inflater.inflate(R.layout.fragment_home, container, false);
                return rootView;                                                                            // edit this condition
            }
**

Regrese Home.newInstance ("1", "1"), Lendings.newInstance ("2", "2"); Transactions.newInstance ("3", "3") ;; //ejemplo

** case 0:
                        return Transactions.newInstance("1" ,"1");
                    case 1:
                        return Lendings.newInstance("2", "2");
                    case 2:
                        return Home.newInstance("3", "3");
    **
1
quangminhs 18 ene. 2018 a las 02:44

Entiende erróneamente cómo Android procesa la vista Fragmento y pestañas.

Cuando utiliza la plantilla de Actividad con pestañas, en realidad ViewPager carga 3 Fragmentos, y estos fragmentos son administrados por un Adapter (Creo que por defecto es SectionsPagerAdapter extends FragmentPagerAdapter)

Si desea crear un Fragmento diferente con un diseño diferente (separado xml), entonces necesita hacer cambios desde ese adaptador:

    public Fragment getItem(int position) {
        // getItem is called to instantiate the fragment for the given page.
        // Return a SearchFragment (defined as a static inner class below).
        switch (position) {
            case 0:
                return Fragment1.newInstance(position + 1);
            case 1:
                return Fragmen2.newInstance(position + 1);
            case 2:
                return Fragment3.newInstance(position + 1);
        }
        return null;
    }
1
Jacky 15 ene. 2018 a las 02:55

Creo que no creaste 3 objetos de Fragment. Por favor, muestre más código.

1
quangminhs 15 ene. 2018 a las 02:29
48256035