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