1
我有一个内部的讨论,关于在控制器活动内部的碎片内容之间共享信息的更好方式。在第一个经典的方法,你可以设置你什么时候如下替换片段参数: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;
}
但片段1和Fragment2它们都在ControllerActivity中,所以我也可以考虑通过在ControllerActivity中声明属性来共享在Fragment1中获取的信息的第二种方法,以便我可以在活动中声明以前的对象,如下所示任何片段:
编辑
public class ControllerActivity extends FragmentActivity{
int value = 5;
...
然后,我的片段里面:
((SplashActivity)getActivity()).value = 10; //i can assign or recover value when i desire
我的问题是什么不便之处将有做的第二种方式。
你会在你的应用程序中使用异步操作,它可以改变活动值? –
你的意思是“片段间通信”吗? – Paritosh
我以这种方式知道的唯一的邪恶就是恶魔的静态变量释放!说了我不能拒绝使用它们。 – Skynet