refresh a fragment from its parent activity
Solution 1
You can find your fragment by the Tag, but of course you need to give this tag to it while adding the fragment.
First add your fragment with a tag:
fragmentManager = getFragmentManager();
fragmentTransaction = fragmentManager.beginTransaction();
SomeFragment fragment = new ManageLinksFragment();
fragmentTransaction.add(R.id.fragment_container1,fragment, "sometag");
fragmentTransaction.commit();
And then on the Activity's site:
SomeFragment mSomeFragment = (SomeFragment) getFragmentManager().findFragmentByTag("sometag");
// now mSomeFragment.callsomething();
Solution 2
You have to do this :
frag.getFragmentManager().beginTransaction().detach(frag).commit();
frag.getFragmentManager().beginTransaction().attach(frag).commit();
Solution 3
Your fragments are managed by the adapter. Therefore, you also have to call for the adapter to refresh your fragments. These steps are necessary:
Override getItemPosition in your Adapter
@Override public int getItemPosition(Object object) { // POSITION_NONE makes it possible to reload the PagerAdapter return POSITION_NONE; }
Once you did that call
mViewPager.getAdapter.notifyDataSetChanged();
in your Activity. From the fragment object itself you could use a callback to inform the Activity of the need to refresh.
This will freshly populate the viewPager with new instances of your fragments which is like restarting / refreshing the fragment.
Hope it helps and this was what you were looking for.
Solution 4
getFragmentManager().beginTransaction().detach(this).attach(this).commit();
l3utterfly
Updated on November 14, 2020Comments
-
l3utterfly over 3 years
I have almost the exact same problem as this question here: Android, How to restart/refresh a fragment from FragmentActivty?
I'm trying to call the a method of a
ListFragment
from the parentFragmentActivity
.However, I'm using the template Swipe + Fixed Tabs generated by eclipse. I tried calling
getSupportFragmentManager().findFragmentById(R.id.myfragment)
but the return value is always null. I'm guessing this might be a problem because I did not definemyfragment
anywhere in my app. But I am unsure where to define it as all fragments are created dynamically.For those who are not familiar with the Swipe + Fixed Tabs template generated by the Android SDK in Eclipse, the fragments are created by overriding the
FragmentPagerAdapter
getItem
function, returning a new instance of my fragment.Any help would be appreciated.
Relevant code: How I setup my adapter:
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); // Set up the ViewPager with the sections adapter. mViewPager = (ViewPager) findViewById(R.id.activity_comment); mViewPager.setAdapter(mSectionsPagerAdapter);
Overriding the adapter getItem function:
@Override public Fragment getItem(int position) { // getItem is called to instantiate the fragment for the given page. // Return a DummySectionFragment (defined as a static inner class // below) with the page number as its lone argument. switch(position) { case 0: return CommentsFragment.newInstance(); case 1: default: return LikesFragment.newInstance(); } }
The newInstance() functions simply return an instance of themselves, since the classes for my fragment are static.
-
l3utterfly over 10 yearsI'm not sure how to implement your method.. I've updated the question with the code I have. Apparently, I did not use fragmentTransaction to add the fragment to the manager.
-
l3utterfly over 10 yearsCan you elaborate a bit more? Where should I put this? Is frag variable one of my fragments?
-
Dr.jacky almost 10 yearsIt's not working. Error happened: "Can't change tag of fragment". Please see my related question: stackoverflow.com/questions/24833912/…
-
Prakash almost 8 yearsuse getSupportFragmentManager() if your app supporting v4.
-
JCarlosR almost 8 yearsIs it the only way? Why don't save the fragment instance in an attribute of the activity class?