Android Refresh a Fragment List from Its Parent Activity

Android refresh a fragment list from its parent activity

You can easily achieve this using INTERFACE

MainActivity.java

public class MainActivity extends Activity {

public FragmentRefreshListener getFragmentRefreshListener() {
return fragmentRefreshListener;
}

public void setFragmentRefreshListener(FragmentRefreshListener fragmentRefreshListener) {
this.fragmentRefreshListener = fragmentRefreshListener;
}

private FragmentRefreshListener fragmentRefreshListener;

@Override
public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


Button b = (Button)findViewById(R.id.btnRefreshFragment);

b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(getFragmentRefreshListener()!=null){
getFragmentRefreshListener().onRefresh();
}
}
});


}


public interface FragmentRefreshListener{
void onRefresh();
}

}

MyFragment.java

public class MyFragment extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = null; // some view

/// Your Code


((MainActivity)getActivity()).setFragmentRefreshListener(new MainActivity.FragmentRefreshListener() {
@Override
public void onRefresh() {

// Refresh Your Fragment
}
});


return v;
}
}

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 a Fragment from mainactivity

Got my answer here Android refresh a fragment list from its parent activity as suggested by @Prem. Works perfectly fine for me.

Its is achievable by making an interface

MainActivity.java

public class MainActivity extends Activity {

public FragmentRefreshListener getFragmentRefreshListener() {
return fragmentRefreshListener;
}

public void setFragmentRefreshListener(FragmentRefreshListener fragmentRefreshListener) {
this.fragmentRefreshListener = fragmentRefreshListener;
}

private FragmentRefreshListener fragmentRefreshListener;

@Override
public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


Button b = (Button)findViewById(R.id.btnRefreshFragment);

b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(getFragmentRefreshListener()!=null){
getFragmentRefreshListener().onRefresh();
}
}
});


}


public interface FragmentRefreshListener{
void onRefresh();
}}

MyFragment.java

public class MyFragment extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = null; // some view

/// Your Code


((MainActivity)getActivity()).setFragmentRefreshListener(new MainActivity.FragmentRefreshListener() {
@Override
public void onRefresh() {

// Refresh Your Fragment
}
});


return v;
}}

How to refresh a fragment from an activity in android?

I assume you are trying to refresh fragment when coming back from an activity (that activity does not hosting the fragment which needs to be refreshed), if my assumption is correct please try the below approach, incase not please clarify the question with more info.

Try : Have a boolean variable in fragment and update its value true or false based on fragment visible state using its lifecycle methods.

public class SampleFragment extends Fragment {

private boolean shouldRefreshOnResume = false;

public static SampleFragment newInstance() {
SampleFragment fragment = new SampleFragment();
return fragment;
}

public SampleFragment() {
// Required empty public constructor
}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_blank,
container, false);
}

@Override
public void onResume() {
super.onResume();
// Check should we need to refresh the fragment
if(shouldRefreshOnResume){
// refresh fragment
}
}

@Override
public void onStop() {
super.onStop();
shouldRefreshOnResume = true;
}
}

Refresh Fragment at reload

I think you want to refresh the fragment contents upon db update

If so, detach the fragment and reattach it

// Reload current fragment
Fragment frg = null;
frg = getSupportFragmentManager().findFragmentByTag("Your_Fragment_TAG");
final FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.detach(frg);
ft.attach(frg);
ft.commit();

Your_Fragment_TAG is the name you gave your fragment when you created it

This code is for support library.

If you're not supporting older devices, just use getFragmentManager instead of getSupportFragmentManager

[EDIT]

This method requires the Fragment to have a tag.

In case you don't have it, then @Hammer's method is what you need.

Refresh fragment of ViewPager from parent activity

I had same requirement i did following :-
1. Extend pagerAdapter with FragmentStatePagerAdapter
2. Implement below in your pagerAdapter class

 @Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}

  1. then when ever you refresh just call -

notifyDataSetChanged();

on adapter.

you can get your adapter from your viewpager as below:

viewPager.getAdapter().notifyDataSetChanged();

here viewpager is reference of my viewpager.



Related Topics



Leave a reply



Submit