我正在开发一个包含2个活动的应用程序。 在我的活动1中,我有一个包含片段的NavigationDrawer。 我有2个片段中的微调框。
我想将Fragment1的数据和Fragment2的数据传递到Fragment3(仍处于相同的活动中),然后编写一个Button,将在Fragment 3中收集的数据发送到Activity 2。
我可以将数据从活动1传递到活动2而无铅,但是我不知道如何从Fragment检索数据,然后将它们传递给活动2。
我是Fragments中的新手。...
我的片段之一的代码,包括SPINNERS:
public static TypeInterventionFragment newInstance() {return (new TypeInterventionFragment()); }
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view= inflater.inflate(R.layout.fragment_type_intervention, container, false);
mSpinner1 = (Spinner) view.findViewById(R.id.spinner1);
mSpinner2 = (Spinner) view.findViewById(R.id.spinner2);
mSpinner3 = (Spinner) view.findViewById(R.id.spinner3);
mSpinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
String selectedClass = parent.getItemAtPosition(position).toString();
switch (selectedClass)
{
case "Constatation du dégat des eaux":
// assigning div item list defined in XML to the div Spinner
mSpinner2.setAdapter(new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_spinner_dropdown_item,
getResources().getStringArray(R.array.sousliste1)));
mSpinner3.setAdapter(new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_spinner_dropdown_item,
getResources().getStringArray(R.array.resultat)));
break;
case "Relevé humidité":
mSpinner2.setAdapter(new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_spinner_dropdown_item,
getResources().getStringArray(R.array.sousliste2)));
break;
case "Thermographie Infrarouge":
mSpinner2.setAdapter(new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_spinner_dropdown_item,
getResources().getStringArray(R.array.sousliste3)));
break;
case "Mise en pression":
mSpinner2.setAdapter(new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_spinner_dropdown_item,
getResources().getStringArray(R.array.sousliste4)));
break;
case ">Mise en évacuation équipement sanitaire":
mSpinner2.setAdapter(new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_spinner_dropdown_item,
getResources().getStringArray(R.array.sousliste5)));
break;
case "Aspersion équipement sanitaire":
mSpinner2.setAdapter(new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_spinner_dropdown_item,
getResources().getStringArray(R.array.sousliste6)));
break;
case "Inspection vidéo dans canalisation":
mSpinner2.setAdapter(new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_spinner_dropdown_item,
getResources().getStringArray(R.array.sousliste7)));
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
return view;
}
}
我希望从那些微调器中获得选中的项目给我,显示在包含Textview的片段中,然后通过按下按钮将这些数据传递给另一个活动。
如果您知道该怎么做,则可能会挽救我的命 我两个月以来一直在为此工作
非常感谢 还有我的法国朋友:Merci les amis si vous pouvez m'aider !!!
答案 0 :(得分:0)
无论何时实例化活动的片段,都可以保留指向它们的链接。 假设您的ActivityA和片段创建块如下所示:
public class ActivityA extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FragmentTransaction fragmentTransactionA = getSupportFragmentManager().beginTransaction();
fragmentTransactionA.replace(R.id.yourFragmentAContainerID, new FragmentA(), "fragmentA");
fragmentTransactionA.commit();
FragmentTransaction fragmentTransactionB = getSupportFragmentManager().beginTransaction();
fragmentTransactionB.replace(R.id.yourFragmentBContainerID, new FragmentB(), "fragmentB");
fragmentTransactionB.commit();
}
}
您不仅可以使用new FragmentA()
或new FragmentB()
,还可以在活动上创建属性并为它们分配新片段的值,从而有效地在ActivityA和片段之间创建链接。
public class ActivityA extends AppCompatActivity {
private FragmentA fragmentA;
private FragmentB fragmentB;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FragmentTransaction fragmentTransactionA = getSupportFragmentManager().beginTransaction();
fragmentA = new FragmentA();
fragmentTransactionA.replace(R.id.yourFragmentAContainerID, fragmentA, "fragmentA");
fragmentTransactionA.commit();
FragmentTransaction fragmentTransactionB = getSupportFragmentManager().beginTransaction();
fragmentB = new FragmentB();
fragmentTransactionB.replace(R.id.yourFragmentBContainerID, fragmentB, "fragmentB");
fragmentTransactionB.commit();
}
}
也就是说,现在您可以在活动时随时从片段中获取变量。假设您要获取片段A的“ propertyX”和片段B的“ propertyY”,现在只要在有Activity的情况下,只需在活动中调用fragmentA.getPropertyX()
和fragmentB.getPropertyY()
即可,然后再更改为ActivityB方法已经公开,并且是公开的。这只是一个示例,因为我们没有针对您的问题的所有代码,所以我自由地创建了一个示例类。
如果您仍然需要帮助,请进来。
答案 1 :(得分:0)
建议在片段之间进行通信的方法是创建一个共享的ViewModel对象。
这是来自Developer.android.com的链接:
Communicate with other fragments | Android Developers
您应该寻找的是使用“活动”作为片段之间的桥梁。使用接口是常见的做法。
答案 2 :(得分:0)
非常感谢, 这是我的MainActivity的代码:
class TestController
{
public function test ()
{
$pnl = App::make('RegisterController')->getData($init = ['startdate' => '2018-04-10','enddate' => '2019-04-10']);
}
}
Class RegisterController
{
public function getData($init = false)
{
$init = [
'startdate' => Input::get('startdate', Carbon::now()->firstOfMonth()->toDateString()),
'enddate' => Input::get('enddate', Carbon::now()->lastOfMonth()->toDateString())
];
Debugbar::info($init); // <----date is null
return $init;
}
}
}