Bottom navigation ViewPager Fragments android

0

I'm implementing a navigation with Bottom navigation and ViewPage using Fragments, but I have a problem refreshing the information in the ViewPager.

Each page of the viewpager shows a list and when you click on an item in the list, it sends it to another fragment with a basic type of detail, the problem is when I click the bottomnavigation button, the lists are no longer refreshed, refresh when I start to navigate in the viewpager as the third option, or when I'm in the detail and I return from the phone just does not cool, I hope you can help me.

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 
 xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="app.PrincipalActivity"
tools:showIn="@layout/activity_principal">


<FrameLayout
android:id="@+id/frame_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:animateLayoutChanges="true">

</FrameLayout>


<android.support.design.widget.BottomNavigationView
    android:id="@+id/bottomNav"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginEnd="0dp"
    android:layout_marginStart="0dp"
    android:background="@color/colorNegroClaro"
    app:itemTextColor="@color/colorBlanco"
    app:itemIconTint="@android:color/darker_gray"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:menu="@menu/navigation" />

 </android.support.constraint.ConstraintLayout>

Main class.

public class PrincipalActivity extends AppCompatActivity {

private BottomNavigationView bottomNav;
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
        = new BottomNavigationView.OnNavigationItemSelectedListener() {

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {

        Fragment selectedFragment = null;

        switch (item.getItemId()) {
            case R.id.navigation_proyectos:
                Log.i("principal","navigation_a");

                selectedFragment = AdminProyectosFragment.newInstance();

                break;
            case R.id.navigation_actividades:
                Log.i("principal","navigation_actividades");

                selectedFragment = ActividadesViewPagerFragment.newInstance();

                break;
            case R.id.navigation_devengado:
                Log.i("principal","navigation_x");

                selectedFragment = DevengarPrincipalFragment.newInstance();
                break;

            case R.id.navigation_salir:
                Log.i("principal","navigation_salir");

                selectedFragment = ActividadesViewPagerFragment.newInstance();
                break;
        }


        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.replace(R.id.frame_layout, selectedFragment);
        transaction.addToBackStack(null);
        transaction.commit();
        return true;
    }
};



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_principal);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayShowTitleEnabled(false);

    bottomNav = (BottomNavigationView) findViewById(R.id.bottomNav);
    bottomNav.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);

    // En este fragmento se selecciona la segunda opción del viewpager por defecto.
    bottomNav.setSelectedItemId(R.id.navigation_actividades);

    Fragment selectedFragment = ActividadesViewPagerFragment.newInstance();
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.frame_layout, selectedFragment);
    transaction.addToBackStack(null);
    transaction.commit();
   }

 }

Class of the viewpager.

 public class ActividadesViewPagerFragment extends Fragment {

//FragmentPagerAdapter adapterViewPager;
private FragmentPagerAdapter adapterViewPager;
ViewPager vpPager;


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

@Override
public void onResume() {
    super.onResume();
    Log.i("onResume","onResume >>>>>>>>>>>>>>>>");

    /*if(vpPager != null){
        Log.i("vpPager != null "," vpPager.setCurrentItem(0) >>>>>>>>>>>>>>>>>>");
        vpPager.setCurrentItem(0);
    }*/


}

@Override
public void onPause() {
    super.onPause();
    Log.i("onPause","onPause >>>>>>>>>>>>>>>>>>>");
}

public static ActividadesViewPagerFragment newInstance() {
    ActividadesViewPagerFragment fragment = new ActividadesViewPagerFragment();

    return fragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    Log.i("onCreateView"," onCreateView >>>>>>>>>>>>>>>>>>>>>>>");
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_actividades_view_pager, container, false);


    vpPager = (ViewPager) view.findViewById(R.id.vpPager);
    adapterViewPager = new MyPagerAdapter(getActivity().getSupportFragmentManager());
    //adapterViewPager = new FragmentPagerAdapter(getActivity().getSupportFragmentManager());
    vpPager.setAdapter(adapterViewPager);

    //vpPager.setPageTransformer(true, new CubeOutTransformer());

    // Attach the page change listener inside the activity
    vpPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {

        // This method will be invoked when a new page becomes selected.
        @Override
        public void onPageSelected(int position) {
            Toast.makeText(getActivity(),
                    "Selected page position: " + position, Toast.LENGTH_SHORT).show();


        }

        // This method will be invoked when the current page is scrolled
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            // Code goes here
        }

        // Called when the scroll state changes:
        // SCROLL_STATE_IDLE, SCROLL_STATE_DRAGGING, SCROLL_STATE_SETTLING
        @Override
        public void onPageScrollStateChanged(int state) {
            // Code goes here
        }
    });

    return view;
}

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    Log.i("onViewCreated"," onViewCreated >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
}

public  static class MyPagerAdapter extends FragmentPagerAdapter {
    private static int NUM_ITEMS = 5;

    public MyPagerAdapter(FragmentManager fragmentManager) {
        super(fragmentManager);
    }

    // Returns total number of pages
    @Override
    public int getCount() {
        return NUM_ITEMS;
    }

    // Returns the fragment to display for that page
    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0: // Fragment # 0 - This will show FirstFragment

                Log.i("getItem",": position = "+position);
                return ActividadesListaFragment.newInstance();

            case 1: // Fragment # 0 - This will show FirstFragment different title
                Log.i("getItem",": position = "+position);
                return ActividadesListaFragment.newInstance();
            case 2: // Fragment # 1 - This will show SecondFragment
                Log.i("getItem",": position = "+position);
                return ActividadesListaFragment.newInstance();

            case 3: // Fragment # 1 - This will show SecondFragment
                Log.i("getItem",": position = "+position);
                return ActividadesListaFragment.newInstance();

            case 4: // Fragment # 1 - This will show SecondFragment
                Log.i("getItem",": position = "+position);

                return ActividadesListaFragment.newInstance();
            default:
                return null;
        }
    }

    // Returns the page title for the top indicator
    @Override
    public CharSequence getPageTitle(int position) {

        String headerTitulo = "";

        switch (position){

            case 0:

                headerTitulo = "Tab1";

                break;
            case 1:

                headerTitulo = "Tab2";

                break;
            case 2:
                headerTitulo = "Tab3";
                break;

            case 3:
                headerTitulo = "Tab4";
                break;

            case 4:
                headerTitulo = "Tab5";
                break;
        }

        return headerTitulo;
    }

}

}

THE code of the listing.

public class ActividadesListaFragment extends Fragment {

TextView tvTitulo;

private ListView list;
private SimpleThreeObjectsAdapter adapter;
private SimpleThreeObjectDTO objeto;
private List<ColumnaGenericaInterface> catalogos;
private ColumnaGenericaInterface catalogoSeleccionado;

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


public static ActividadesListaFragment newInstance() {
    ActividadesListaFragment fragment = new ActividadesListaFragment();
    return fragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_actividades_lista, container, false);


    list = (ListView) view.findViewById(R.id.list_view);
    tvTitulo = (TextView) view.findViewById(R.id.tv_titulo);

    crearListEstatica();

    return view;
}

private void crearListEstatica(){

    catalogos = new ArrayList<ColumnaGenericaInterface>();
    ColumnaGenericaDTO cat;

    cat = new ColumnaGenericaDTO();
    cat.setFirstColumn("Opcion 1");
    cat.setColumnCenter("Center 1");
    cat.setColumnRight("Right 1");
    catalogos.add(cat);

    cat = new ColumnaGenericaDTO();
    cat.setFirstColumn("Opcion 2");
    cat.setColumnCenter("Center 2");
    cat.setColumnRight("Right 2");
    catalogos.add(cat);


    crearAdapters();
}

private void crearAdapters(){
    adapter = new SimpleThreeObjectsAdapter(getActivity(),catalogos);

    //Relacionando la lista con el adaptador
    list.setAdapter(adapter);

    list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
            ColumnaGenericaInterface current= adapter.getItem(position);

            catalogoSeleccionado = current;

            DetalleGenericoFragment selectedFragment = new DetalleGenericoFragment();
            FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
            transaction.replace(R.id.frame_layout, selectedFragment);
            transaction.addToBackStack(null);
            transaction.commit();
        }
    });

  }

}

The detail when clicking on a list right now has nothing in particular but another fragment.

public class DetalleGenericoFragment extends Fragment {

private static final String ARG_PARAM_DETALLE = "arg_detalle_generico";

// TODO: Rename and change types of parameters
private List<DetalleGenericInterface> tagsValues;

//private OnFragmentInteractionListener mListener;

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

public static DetalleGenericoFragment newInstance(List<DetalleGenericInterface> lstTagsValues) {
    DetalleGenericoFragment fragment = new DetalleGenericoFragment();

    Bundle args = new Bundle();
    //args.putString(ARG_PARAM1, param1);
    //args.putString(ARG_PARAM2, param2);
    args.putSerializable(ARG_PARAM_DETALLE,"");

    fragment.setArguments(args);
    return fragment;
}

public static DetalleGenericoFragment newInstance() {
    DetalleGenericoFragment fragment = new DetalleGenericoFragment();

    return fragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    try {
        if (getArguments() != null) {
            //mParam2 = getArguments().getString(ARG_PARAM2);
            //tagsValues = (List<DetalleGenericInterface>) getArguments().getSerializable(ARG_PARAM_DETALLE);
        }
    }catch (Exception e){}

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_detalle_generico, container, false);
}


}

    
asked by Rogelio Sanchez 11.04.2018 в 02:32
source

1 answer

0

Hello! Have some time for this question but in case you have not solved the problem yet, try replacing:

adapterViewPager = new MyPagerAdapter(getActivity().getSupportFragmentManager());

by:

adapterViewPager = new MyPagerAdapter(getActivity().getChildFragmentManager());
    
answered by 31.05.2018 в 19:49