У меня есть внутренняя дискуссия о том, какой способ лучше обмениваться информацией между содержимым фрагментов внутри активности контроллера. В первом классическим способом, вы можете задать аргументы, когда вы собираетесь заменить фрагменты следующим образом:Фрагменты Android об обмене информацией
//Just now i'm inside Fragment 1 and i'll navigate to Fragment 2
Fragment newFragment = getFragmentManager().findFragmentByTag(Fragment2.TAG);
Bundle b = new Bundle();
b.putBoolean("test1", true);
// Create new fragment and transaction
if(newFragment==null)
newFragment = Fragment2.newInstance(b);
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)//.setCustomAnimations(R.anim.enter_anim, R.anim.exit_anim)
.replace(R.id.fragment_place, newFragment, Fragment2.class.getName())
.addToBackStack(newFragment.getClass().getName())
.commit();
Метод newInstace делает, как я имел в виду выше, поэтому, с setArguments:
public static Fragment2 newInstance(Bundle arguments){
Fragment2 f = new Fragment2();
if(arguments != null){
f.setArguments(arguments);
}
return f;
}
Но Fragment1 и Fragment2 они оба находятся внутри ControllerActivity, поэтому я также могу подумать о втором способе обмена информацией, полученной в Fragment1 по направлению к Fragment2, путем объявления атрибутов в ControllerActivity, поэтому я мог бы сделать (объявив ранее объект в активности) следующим образом внутри любой фрагмент:
EDIT
public class ControllerActivity extends FragmentActivity{
int value = 5;
...
А потом, в моем фрагменте:
((SplashActivity)getActivity()).value = 10; //i can assign or recover value when i desire
Мой вопрос: что неудобствами бы делать в качестве второго пути.
Вы будете использовать асинхронные операции в своем приложении, которые могут изменять значения активности? –
Вы имеете в виду «inter-fragment communication»? – Paritosh
Единственное зло, которое я знаю таким образом, это демоны Статические переменные развязывают! Сказав, что я не могу сопротивляться их использованию. – Skynet