Nella mia app sto usando la scheda di navigazione usando view pager. Ho in grado di disegnato con successo le schede utilizzando il codice pubblicato su:
Come aggiornare l'elenco ogni volta che le schede vengono modificate in Visualizza il pager
https://github.com/codepath/android_guides/wiki/Sliding-Tabs-with-PagerSlidingTabStrip
Qui ho usato la scheda e vista scorrevole cercapersone sia per ottenere il tabs.Everything navigazione sta lavorando bene, ma l'elenco non sono essere aggiornato quando mi sto spostando verso l'altra scheda. OnResume() viene chiamato anche la variabile lista oggetti viene aggiornata anche durante il debug ma l'elenco visivo non viene aggiornato.
Here i am alcuni frammenti del codice:
Per Tab1: che nel mio caso è scheda attiva
@Override
public void onResume() {
super.onResume();
if(!internetUtil.isConnectedToInternet(getActivity())){
mSwipeRefreshLayout.setEnabled(false);
}else{
mSwipeRefreshLayout.setEnabled(true);
new GetUsersFromServerTask().execute(); // Here i am making the network calls
}
}
Su Tab2: Quale è scheda Archivio
@Override
public void onResume() {
super.onResume();
new GetUsersArchivedFromServerTask().execute(); // Network calls
}
In MainActivity:
public class MaterialTab extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.material_main_sample);
ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
viewPager.setAdapter(new SampleFragmentPagerAdapter(getSupportFragmentManager()));
PagerSlidingTabStrip tabsStrip = (PagerSlidingTabStrip) findViewById(R.id.tabs);
tabsStrip.setViewPager(viewPager);
tabsStrip.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
if(position == 0){
ActiveFragment activeFragment = new ActiveFragment();
final FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.detach(activeFragment);
ft.attach(activeFragment);
ft.commit();
} if(position == 1){
ArchiveFragment archiveFragment = new ArchiveFragment();
final FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.detach(archiveFragment);
ft.attach(archiveFragment);
ft.commit();
}
}
});
}
}
anche la cosa è quando sto facendo SwipeRefresh allora la lista è sempre aggiornato. Ora sono totalmente confuso perché questo comportamento. Quando faccio scorrere la scheda vengono richiamati gli stessi metodi e la lista non viene aggiornata, ma quando faccio SwipeRefresh viene aggiornato.
Questo è il frammento attivo:
public class ActiveFragment extends Fragment {
public void updateFragment(){
new GetUsersArchivedFromServerTask().execute();
}
public class GetUsersArchivedFromServerTask extends AsyncTask<User, Void, String> {
@Override
protected String doInBackground(Shipment... parmas) {
// Log.d(TAG, String.valueOf(shipmentDbHandler.getAllActiveShipments().size()));
_userList1 = userDbHandler.getAllActiveUserByToday(DateTimeUtil.getCurrentTime());
return "";
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onPostExecute(String str) {
// Set the refresh Listener to false after the list has been loaded with new set of data
if (mSwipeRefreshLayout.isRefreshing()) {
mSwipeRefreshLayout.setRefreshing(false);
}
if(_userList1.size() == 0){
ViewGroup parentOne = (ViewGroup) viewOne.getParent();
if(parentOne != null){
parentOne.removeView(viewOne);
}
}
if(_shipmentList1.size() > 0){
mShipmentAdapter = new ShipmentAdapter(getActivity(),_userList1,1);
shipmentListView1.setAdapter(mShipmentAdapter);
setListViewHeightBasedOnChildren(shipmentListView1);
ViewGroup parentOne = (ViewGroup) viewOne.getParent();
if(parentOne == null){
mainLayoutOne.addView(viewOne);
}
mShipmentAdapter.notifyDataSetChanged();
}
mSwipeRefreshLayout.setClickable(true);
}
}
}
In ViewPagerAdapter codice miniera sta estendendo FragmentStatePagerAdapter .. – anand
vista frammento carichi cercapersone lato anche, metodo in modo onResume sarà già chiamata, in modo che quando si scorrere a quel frammento poi onResume non chiama di nuovo –