Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can i set a tag for viewpager fragments?

Tags:

I,m using slidingTabLayout with 4 tabs and a viewpager and 4 fragment class for every tab.

i need to reload one of my fragments (first tab) in my project when user click some button, and for this i need to have a tag for that fragment

my question is : how can i set a tag for one of viewpagers fragment???

My MainActivity tab and viewpager codes:

public class MainActivity extends AppCompatActivity     implements NavigationView.OnNavigationItemSelectedListener {    Toolbar toolbar; ViewPager pager; ViewPagerAdapter adapter; SlidingTabLayout tabs; CharSequence Titles[]={"نوع","قیمت","برند","همه"}; int Numboftabs = 4;     @Override protected void attachBaseContext(Context newBase) {     super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase)); }    @Override protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.activity_main);     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);     setSupportActionBar(toolbar);         FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);     fab.setOnClickListener(new View.OnClickListener() {         @Override         public void onClick(View view) {             Snackbar.make(view, "درج آگهی رایگان", Snackbar.LENGTH_LONG)                     .setAction("Action", null).show();         }     });        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);      NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);     navigationView.setNavigationItemSelectedListener(this);         // Creating The ViewPagerAdapter and Passing Fragment Manager, Titles fot the Tabs and Number Of Tabs.     adapter =  new ViewPagerAdapter(getSupportFragmentManager(),Titles,Numboftabs);      // Assigning ViewPager View and setting the adapter     pager = (ViewPager) findViewById(R.id.pager);     pager.setAdapter(adapter);      // Assiging the Sliding Tab Layout View     tabs = (SlidingTabLayout) findViewById(R.id.tabs);     tabs.setDistributeEvenly(true); // To make the Tabs Fixed set this true, This makes the tabs Space Evenly in Available width      // Setting Custom Color for the Scroll bar indicator of the Tab View     tabs.setCustomTabColorizer(new SlidingTabLayout.TabColorizer() {         @Override         public int getIndicatorColor(int position) {             return getResources().getColor(R.color.colorWhite);         }     });      // Setting the ViewPager For the SlidingTabsLayout     tabs.setViewPager(pager);     pager.setCurrentItem(3);     } and .... 

Thank you a lot

like image 504
K1-Aria Avatar asked Jan 18 '16 18:01

K1-Aria


2 Answers

There are couple of solution for this.

1). When the FragmentPagerAdapter adds a Fragment to the FragmentManager, it uses a special tag based on the particular position that the Fragment will be placed. So you can simply get the current visible Fragment in your ViewPager using these lines of code

 Fragment fragment = getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.pager + ":" + ViewPager.getCurrentItem());  // based on the current position you can then cast the page to the correct Fragment class and call some method inside that fragment to reload the data:  if (0 == ViewPager.getCurrentItem() && null != fragment) {       ((TabFragment1)fragment).reloadFragmentData();       }  

2). You should keep track of all the active fragments in the FragmentStatePagerAdapter. For demo sample you can refer to second approach here

3). You can make use of EventBus to post events to your Fragment from anywhere. All you have to do is to register your Fragment for that specific event. For official documentation refer this

like image 80
Mukesh Rana Avatar answered Oct 13 '22 14:10

Mukesh Rana


Here is the method which is used by FragmentPagerAdapter to create the Fragment's tag name:

private static String makeFragmentName(int viewId, long id) {     return "android:switcher:" + viewId + ":" + id; } 

viewId is the id of the ViewPager.
id is the position of the fragment inside the ViewPager.

Example:

String fragmentTag = makeFragmentName(myViewPager.getId(), 2); Fragment fragment = getSupportFragmentManager().findFragmentByTag(fragmentTag); 
like image 34
vovahost Avatar answered Oct 13 '22 14:10

vovahost