Add ContributionsActivityPagerAdapter inner class to manage view pager

This commit is contained in:
neslihanturan 2018-09-06 14:23:45 +03:00
parent 169fcb5727
commit 7540e0379e

View file

@ -3,7 +3,11 @@ package fr.free.nrw.commons.contributions;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.support.design.widget.TabLayout; import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager;
import android.util.Log;
import javax.inject.Inject; import javax.inject.Inject;
@ -13,6 +17,7 @@ import fr.free.nrw.commons.BuildConfig;
import fr.free.nrw.commons.R; import fr.free.nrw.commons.R;
import fr.free.nrw.commons.auth.AuthenticatedActivity; import fr.free.nrw.commons.auth.AuthenticatedActivity;
import fr.free.nrw.commons.auth.SessionManager; import fr.free.nrw.commons.auth.SessionManager;
import fr.free.nrw.commons.nearby.NearbyFragment;
import fr.free.nrw.commons.upload.UploadService; import fr.free.nrw.commons.upload.UploadService;
import static android.content.ContentResolver.requestSync; import static android.content.ContentResolver.requestSync;
@ -31,7 +36,7 @@ public class ContributionsActivity
public Intent uploadServiceIntent; public Intent uploadServiceIntent;
public boolean isAuthCookieAcquired = false; public boolean isAuthCookieAcquired = false;
//public ContributionsActivityPagerAdapter contributionsActivityPagerAdapter; public ContributionsActivityPagerAdapter contributionsActivityPagerAdapter;
private final int CONTRIBUTIONS_TAB_POSITION = 0; private final int CONTRIBUTIONS_TAB_POSITION = 0;
private final int NEARBY_TAB_POSITION = 1; private final int NEARBY_TAB_POSITION = 1;
@ -90,4 +95,105 @@ public class ContributionsActivity
} }
public class ContributionsActivityPagerAdapter extends FragmentPagerAdapter {
FragmentManager fragmentManager;
private boolean isContributionsListFragment = true; // to know what to put in first tab, Contributions of Media Details
public ContributionsFragment contributionsFragment;
public NearbyFragment nearbyFragment;
public ContributionsActivityPagerAdapter(FragmentManager fragmentManager) {
super(fragmentManager);
this.fragmentManager = fragmentManager;
}
@Override
public int getCount() {
return 2;
}
/*
* Do not use getItem method to access fragments on pager adapter. User reference vairables
* instead.
* */
@Override
public Fragment getItem(int position) {
switch (position){
case 0:
ContributionsFragment retainedContributionsFragment = getContributionsFragment(0);
if (retainedContributionsFragment != null) {
/**
* ContributionsFragment is parent of ContributionsListFragment and
* MediaDetailsFragment. If below decides which child will be visible.
*/
if (isContributionsListFragment) {
// TODO: Neslihan retainedContributionsFragment.setContributionsListFragment();
} else {
// TODO: Neslihan retainedContributionsFragment.setMediaDetailPagerFragment();
}
contributionsFragment = retainedContributionsFragment;
return retainedContributionsFragment;
}
// If we reach here, retainedContributionsFragment is null
contributionsFragment = new ContributionsFragment();
String contributionsFragmentTag = makeFragmentName(R.id.pager, 0);
fragmentManager.beginTransaction()
.replace(R.id.pager, contributionsFragment, contributionsFragmentTag)
.addToBackStack(contributionsFragmentTag)
.commit();
return contributionsFragment;
case 1:
if (getNearbyFragment(1) != null) {
return getNearbyFragment(1);
}
return new NearbyFragment();// nearby places needs photo
default:
return null;
}
}
/**
* Generates fragment tag with makeFragmentName method to get retained contributions fragment
* @param position index of tabs, in our case 0 or 1
* @return
*/
private ContributionsFragment getContributionsFragment(int position) {
String tag = makeFragmentName(R.id.pager, position);
return (ContributionsFragment)fragmentManager.findFragmentByTag(tag);
}
/**
* Generates fragment tag with makeFragmentName method to get retained nearby fragment
* @param position index of tabs, in our case 0 or 1
* @return
*/
private NearbyFragment getNearbyFragment(int position) {
String tag = makeFragmentName(R.id.pager, position);
return (NearbyFragment)fragmentManager.findFragmentByTag(tag);
}
/**
* A simple hack to use retained fragment when getID is called explicitly, if we don't use
* this method, a new fragment will be initialized on each explicit calls of getID
* @param viewId id of view pager
* @param index index of tabs, in our case 0 or 1
* @return
*/
public String makeFragmentName(int viewId, int index) {
return "android:switcher:" + viewId + ":" + index;
}
/**
* In first tab we can have ContributionsFragment or Media details fragment. This method
* is responsible to update related boolean
* @param isContributionsListFragment true when contribution fragment should be visible, false
* means user clicked to MediaDetails
*/
private void updateContributionFragmentTabContent(boolean isContributionsListFragment) {
this.isContributionsListFragment = isContributionsListFragment;
}
}
} }