Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android refresh a fragment list from its parent activity

Tags:

I have a main activity which contains the action bar with 3 menu buttons in it.

I then have a fragment within this main activity which has a list.

I would like to be able to refresh the list in the fragment from the main activity, when one of the menu buttons is clicked, or preferably just removed all the rows from the list.

Any help is appreciated.

Thanks.

public class Favourite extends SherlockFragmentActivity {      ActionBar actionBar;      public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.favourite);          actionBar = getSupportActionBar();          actionBar.setDisplayShowTitleEnabled(false);          BitmapDrawable bg = (BitmapDrawable)getResources().getDrawable(R.drawable.actionbar_bg);         bg.setTileModeX(TileMode.REPEAT);          getSupportActionBar().setBackgroundDrawable(bg);          getSupportActionBar().setIcon(R.drawable.favourite_title);          actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);         ActionBar.Tab tabAll = actionBar.newTab();         ActionBar.Tab tabfavs = actionBar.newTab();         ActionBar.Tab tabhist = actionBar.newTab();         tabAll.setText("all");         tabfavs.setText("favs");         tabhist.setText("hist");         tabAll.setTabListener(new MyTabListener());         tabfavs.setTabListener(new MyTabListener());         tabhist.setTabListener(new MyTabListener());         actionBar.addTab(tabAll);         actionBar.addTab(tabfavs);         actionBar.addTab(tabhist);           try{          }         catch(Exception e)         {         }     }       @Override     public boolean onCreateOptionsMenu(Menu menu) {          MenuInflater inflater = getSupportMenuInflater();         inflater.inflate(R.menu.actionbar_itemlist_favourite, menu);          return true;     }      @Override     public boolean onOptionsItemSelected(MenuItem item) {         switch(item.getItemId()) {                 case R.id.history:                     break;                 case R.id.favourite:                     Intent favAct = new Intent(this, Favourite.class);                     startActivity(favAct);                     break;                 case R.id.delete:                     ///I WANT TO BE ABLE TO REFRESH FRAGMENTLIST FROM HERE                 }                 return true;     }    }  class MyTabListener implements ActionBar.TabListener {      public void onTabSelected(Tab tab, FragmentTransaction ft) {         if(tab.getPosition()==0)         {             FavouriteAllWords frag = new FavouriteAllWords();             ft.replace(android.R.id.content, frag);          }         else if(tab.getPosition()==1)         {             FavouriteFavWords frag = new FavouriteFavWords();             ft.replace(android.R.id.content, frag);          }         else if(tab.getPosition()==2)         {             FavouriteHistWords frag = new FavouriteHistWords();             ft.replace(android.R.id.content, frag);         }     }      public void onTabUnselected(Tab tab, FragmentTransaction ft) {         // TODO Auto-generated method stub      }      public void onTabReselected(Tab tab, FragmentTransaction ft) {         // TODO Auto-generated method stub      }  } 

////////////////////MY LIST FRAGMENT CLASS

public class FavouriteAllWords extends ListFragment {      ArrayAdapter<String> adapter;      List<String> stringOfFavWords;      public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);      }      @Override     public View onCreateView(LayoutInflater inflater, ViewGroup group, Bundle saved)     {            adapter = new ArrayAdapter<String>(                   inflater.getContext(), R.layout.row, stringOfFavWords);                   setListAdapter(adapter);            return super.onCreateView(inflater, group, saved);       }      @Override     public void onActivityCreated (Bundle savedInstanceState)     {            super.onActivityCreated(savedInstanceState);     }  } 
like image 905
user1319668 Avatar asked Oct 28 '14 10:10

user1319668


People also ask

How to refresh fragment activity in Android?

This can also be used to communicate between an Activity and a Fragment. Show activity on this post. When you click on ActionBar any Button then call interface to refresh the ListFragment.

How do you refresh a fragment after onBackPressed from activity?

Back button should be handled from Activity. You can override onBackPressed in Activity and call a function on corresponding fragment to reloadItems().

How do you refresh a fragment?

Go to your navigation graph and find the fragment you want to refresh. Create an action from that fragment to itself. Now you can call that action inside that fragment like so.

How do I refresh a fragment from another fragment?

You can access another Fragment by its tag: // find your fragment YourFragment f = (YourFragment) getSupportFragmentManager(). findFragmentByTag("yourFragTag"); // update the list view f. updateListView();


2 Answers

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;     } } 
like image 103
Biraj Zalavadia Avatar answered Sep 27 '22 17:09

Biraj Zalavadia


  • Just make your update/refresh method public and call it from your Activity.

OR

  • Use LocalBroadcastManager or EventBus to send event from your Activity, and by subscribing to this event in a Fragment - react to it and call refresh/update method.
like image 26
localhost Avatar answered Sep 27 '22 17:09

localhost