从片段

时间:2016-02-16 01:01:03

标签: java android

所以目前我有一个具有不同活动的应用程序,我使用按钮在活动之间导航。我后来决定添加导航抽屉并使用片段代替。所以我的一个片段有一堆用户填写的字段,我需要传递给下一个片段。所以我的问题是,我是否将所有工作保留在活动中并从片段中调用活动?或者我只是将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);

3 个答案:

答案 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)

嗯,这里主要有两种选择:

  1. Intent.putExtra()与片段一起使用。就像活动一样,你 也可以将此方法与Fragments一起使用。请参阅以下链接 在Fragments中实现
  2. 另一种选择是使用SharedPreferences并将数据存储为来自一个片段的键值对,并且可以从任何其他活动/片段访问。 See this nice tutorial要更好地理解!

答案 2 :(得分:0)

你在Fragment中有一个特殊的回调来获取Activity。 它被称为:

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    YourActivity activity  = (YourActivity) context;
}