所以目前我有一个具有不同活动的应用程序,我使用按钮在活动之间导航。我后来决定添加导航抽屉并使用片段代替。所以我的一个片段有一堆用户填写的字段,我需要传递给下一个片段。所以我的问题是,我是否将所有工作保留在活动中并从片段中调用活动?或者我只是将java中的所有java包含在java的片段中?在大多数情况下,我从第一个片段中取出字段,并且我想将值传递给下一个片段,以便它可以处理一些计算。
final EditText FinalPriceText = (EditText) v.findViewById(R.id.editTextPrice);
final EditText TradeInPriceText = (EditText) v.findViewById(R.id.editTextTrade);
i.putExtra("FinalAutoPrice", FinalAutoPriceText.getText().toString());
i.putExtra("TradeInPrice", TradeInPriceText.getText().toString());
startActivity(i);
答案 0 :(得分:3)
就计算而言,如果你要使用它们很多并且它们与activity
或android生命周期没有任何关系,我会将它们分成不同的类,然后你可以从任何地方。
如果他们确实依赖于activity
,您仍然可以将它们分开,但在进行计算时会传递对activity
的引用。您可以通过调用任何activity
this.getActivity()
来获取父fragment
您可以将this.getActivity()
转换为父activity
的任何内容,您也可以从该对象调用方法。这样可以正常工作,但您的片段只适用于您指定的activity
,如果您不小心,它可能会变得草率。
否则将它们放在您需要它们的片段中。如果您需要在应用程序中的任何其他位置使用计算,我会考虑最少建议。重复的代码只是在将来要求错误。
就传递数据而言,在static
中创建一个fragment2
实例方法,然后将其传递给您。
例如
public Fragment2 extends Fragment {
public static fragment2 newInstance(MyData myDataIPass) {
Fragment2 fragment = new Fragment2();
Bundle args = new Bundle();
args.putInt("someInt", myDataIPass.someInt);
fragment.setArguments(args);
return fragment;
}
}
在创建像这样的片段事务时调用这个新的实例方法
FragmentManager fm = getActivity().getFragmentManager();
fm.beginTransaction()
.replace(R.id.container, Fragment2.newInstance(MyData myDataIPass))
.commit();
答案 1 :(得分:2)
嗯,这里主要有两种选择:
Intent.putExtra()
与片段一起使用。就像活动一样,你
也可以将此方法与Fragments一起使用。请参阅以下链接
在Fragments中实现
SharedPreferences
并将数据存储为来自一个片段的键值对,并且可以从任何其他活动/片段访问。 See this nice tutorial要更好地理解!答案 2 :(得分:0)
你在Fragment中有一个特殊的回调来获取Activity。 它被称为:
@Override
public void onAttach(Context context) {
super.onAttach(context);
YourActivity activity = (YourActivity) context;
}