Refresh/Reload/Re Instantiate a Fragment in an Android Tab System

refresh a fragment from its parent activity

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

Refresh ListView upon Tab change/swipe (Android)

Think I answered my own question:

I have this code

public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {

mViewPager = (ViewPager) findViewById(R.id.viewpager);
mViewPager.setAdapter(mSectionsPagerAdapter);


}

Select Tab and run code in its fragment

Activity.xml

<android.support.design.widget.TabLayout
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
app:tabGravity="fill"
app:tabMode="fixed" />

<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

Activity.class

TabLayout tabLayout;
ViewPager viewPager;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tab);
tabLayout = findViewById(R.id.tabLayout);
viewPager = findViewById(R.id.viewPager);

setUpviewPager();
tabLayout.setupWithViewPager(viewPager);
}

private void setUpviewPager() {


ViewPagerAdpater viewPagerAdapter = new ViewPagerAdpater(getSupportFragmentManager());
viewPager.setAdapter(viewPagerAdapter);
}


private class ViewPagerAdpater extends FragmentPagerAdapter {


ViewPagerAdpater(FragmentManager supportFragmentManager) {
super(supportFragmentManager);
}

@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new FirsFrag();

case 1:
return new FirsFrag();

case 2:
return new FirsFrag();

default:
return null;
}
}

@Nullable
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "First Tab";
case 1:
return "Second Tab";
case 2:
return "Third Tab";
default:
return "";
}
}

@Override
public int getCount() {
return 3;
}

@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
}



Thanks, just run this code, this adapter is FragmentPagerAdpater

Fragment view in ViewPager is not restored when resuming

After a while ran into the same problem again, so updating this question.
If you're using FragmentStatePagerAdapter you should provide FragmentManager via getChildFragmentManager() instead of getFragmentManager(). See Issue 55068: ViewPager doesn't refresh child fragments when back navigation via backstack



Related Topics



Leave a reply



Submit