I've been trying for a while already (as well, searching in here) for something to help me to refresh listView in my MainFragment, when a button is pressed in other fragment. Could sommeone explain me how to make it work?
Here's MainFragment with the function (I excluded other functions, since I don't see how they contribute):
public class MainFragment extends Fragment {
public void otherList() {
SQLite db = new SQLite(getActivity());
db.open();
Calendar sCalendar = Calendar.getInstance();
String day = sCalendar.getDisplayName(Calendar.DAY_OF_WEEK,
Calendar.LONG, Locale.ENGLISH);
Cursor c = db.getAllRecords(day);
Calendar cal = Calendar.getInstance();
int hour = cal.get(Calendar.HOUR_OF_DAY);
arrayOfBars.clear();
if (c.moveToFirst()) {
do {
String country = c.getString(0);
String city = c.getString(1);
String bar = c.getString(2);
String timeStart = c.getString(3);
String[] h = timeStart.split(":");
int times = Integer.parseInt(h[0]);
String timeEnd = c.getString(4);
String[] h2 = timeEnd.split(":");
int timee = Integer.parseInt(h2[0]);
String placeLaLo = c.getString(5);
String description = c.getString(6);
String likes = c.getString(7);
String offer = c.getString(8);
if (hour < (times + 1) || hour < (timee)) {
getPrefs = PreferenceManager
.getDefaultSharedPreferences(MainFragment.this
.getActivity());
boolean lay = getPrefs.getBoolean("boolean", false);
if (lay == true) {
while (times < timee) {
timeStart = times + ":" + h[1];
times++;
timeEnd = times + ":" + h2[1];
arrayOfBars.add(new BarObject(country, city, bar,
timeStart, timeEnd, placeLaLo, description,
likes, offer, bar));
}
} else {
arrayOfBars.add(new BarObject(country, city, bar,
timeStart, timeEnd, placeLaLo, description,
likes, offer, bar));
}
}
} while (c.moveToNext());
Collections.sort(arrayOfBars, new BarObject.CompST());
lv2.setAdapter(null);
adapter = new BarAdapter(getActivity(), arrayOfBars);
lv2.setAdapter(adapter);
} else {
Toast.makeText(getActivity(), "No database found",
Toast.LENGTH_LONG).show();
}
db.close();
}
}
And here's the other fragment:
public class SocialMedia extends Fragment {
ImageButton facebook, twitter, layoutS;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.social_media, container, false);
layoutS = (ImageButton) view.findViewById(R.id.ibLayout);
layoutS.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences getPrefs = PreferenceManager
.getDefaultSharedPreferences(SocialMedia.this
.getActivity());
boolean lay = getPrefs.getBoolean("boolean", false);
SharedPreferences.Editor e = getPrefs.edit();
lay = !lay;
e.putBoolean("boolean", lay);
e.commit();
//Here I want to call otherList() from MainFragment
}
});
return view;
}
}
Create an instance of the fragment's class. Pass any additional intent arguments through to the class. Obtain a reference to the fragment manager instance. Call the beginTransaction() method on the fragment manager instance.
To allow a Fragment to communicate up to its Activity, you can define an interface in the Fragment class and implement it within the Activity. The Fragment captures the interface implementation during its onAttach() lifecycle method and can then call the Interface methods in order to communicate with the Activity.
So to share a string between fragments you can declare a static String in Activity. Access that string from Fragment A to set the value and Get the string value in fragment B. 2. Both fragments are hosted by different Activities- Then you can use putExtra to pass a string from Fragment A of Activity A to Activity B.
FragmentManager fm = getFragmentManager();
MainFragment fragm = (MainFragment)fm.findFragmentById(R.id.main_fragment);
fragm.otherList();
This code worked best for me. And seems quite easy
you should use interface
for this. define an interface
in OtherFragment
class and implement that in your MainActivity
and define a public
method in your MainFragment
for refreshing your ListView
and call that method from your MainActivity
. here is an example :
public Class OtherFragment extends Fragment implements OnClickListener {
private Communicator communicator;
...
public void setCommunicator(Communicator communicator) {
this.communicator = communicator;
}
@Override
public void onClick(View v) {
communicator.clicked();
}
public interface Communicator {
public void clicked();
}
}
and in your MainActivity
:
public class MainActivity extends Activity implements OtherFragment.Communicator {
MainFragment mainFragment;
@Override
protected void onCreate(Bundle b) {
...
OtherFragment otherFragment = new OtherFragment();
otherFragment.setCommunicator(this);
...
}
...
@Override
public void clicked() {
mainFragment.updateList();
}
}
and in your MainFragment
:
public class MainFragment extends Fragment {
...
public void updateList() {
// update list
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With