Java 子片段的过去值->;mainactivity无法将fragment\u fr\u event\u Birth强制转换为fragment\u fr\u event\u婚礼android studio
我在mainActivity中有一个片段,该片段包含fragmentcontainerView,可以用spinner onselectedListener替换多个子片段。我希望能够通过以下方式从子片段传递这些值:Java 子片段的过去值->;mainactivity无法将fragment\u fr\u event\u Birth强制转换为fragment\u fr\u event\u婚礼android studio,java,android,android-fragments,Java,Android,Android Fragments,我在mainActivity中有一个片段,该片段包含fragmentcontainerView,可以用spinner onselectedListener替换多个子片段。我希望能够通过以下方式从子片段传递这些值:fragmentevent.TogetFName()。在父片段中,我使用fragment\u fr\u event\u birth=(fragment\u fr\u event\u birth)getChildFragmentManager()从子片段(fragment\u birth)
fragmentevent.TogetFName()使用Mainactivity中的按钮编码>。在父片段中,我使用fragment\u fr\u event\u birth=(fragment\u fr\u event\u birth)getChildFragmentManager()从子片段(fragment\u birth)获取值代码>和其他childfragment的其他值,带有fragment\u fr\u event\u wed=(fragment\u fr\u event\u婚庆)getChildFragmentManager().findFragmentById(R.id.fragment\u event\u child\u fragment)代码>,我知道它们不能一次分配给不同的片段类,但有没有一种聪明的方法可以做到这一点,或者有没有其他方法可以从child->parent fragment->mainActivity传递值
主要活动:
public void onClick(View view){
case "Event":
Fragment_fr_Event fragment_fr_event = (Fragment_fr_Event) getSupportFragmentManager().findFragmentById(R.id.fragment_generated_mainView);
if(fragment_fr_event.TogetWedChildFcoupleName() !=null && fragment_fr_event.TogetEventType().equals("Wedding")){
testThis.setText(fragment_fr_event.TogetWedChildFcoupleName());
}if( fragment_fr_event.TogetEventType().equals("Birthday") && fragment_fr_event.TogetBirthdayFName() !=null){
testTat.setText(fragment_fr_event.TogetBirthdayFName());
}
}
ChildFragment(生日片段):
儿童片段(婚礼片段):
父片段(EventFragment):
@覆盖
已创建公用void onview(@NonNull视图,@Nullable Bundle savedInstanceState){
super.onViewCreated(视图,savedInstanceState);
微调器类型事件微调器=rootview.findViewById(R.id.type\u事件);
TypeEventSpinner.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
String tag_items=parent.getItemAtPosition(position.toString();
开关(标记项目){
案例“婚礼”:
frag_fr_event_wed=新片段_fr_event_widding();
FragmentTransaction=getChildFragmentManager().beginTransaction();
事务.replace(R.id.fragment\u event\u child\u fragment,frag\u fr\u event\u wed).disallowedtobackstack().commit();
打破
案例“生日”:
fragment_fr_event_birth=新的fragment_fr_event_birth();
事务=getChildFragmentManager().beginTransaction();
transaction.replace(R.id.fragment\u event\u child\u fragment,fragment\u fr\u event\u birth)。disallowedtobackstack().commit();
打破
}
}
@凌驾
未选择公共无效(AdapterView父级){
}
});
}
公共字符串ToGetWebChildFCoupleName(){
if(frag\u fr\u event\u wed!=null){
fragment\u fr\u event\u wed=(fragment\u fr\u event\u婚礼)getChildFragmentManager().findFragmentById(R.id.fragment\u event\u child\u fragment);
返回frag_fr_event_wed.toGetFcoupleName();
}返回“空”;
}
公共字符串TogetBirthdayFName(){
if(片段事件生日!=null){
fragment_fr_event_birth=(fragment_fr_event_birth)getChildFragmentManager().findffragmentById(R.id.fragment_event_child_fragment);
返回片段\u fr\u event\u birthday.TogetEventBirthdayFName();
}
返回“空”;
}
老实说,我不明白你在那里做了什么,但我得到了你想要的,你想要与父类的父类通信,你这样做的方式使它变得如此复杂,甚至不可读,但是当然总有一个好的方法来做一些事情,在您的例子中,有Android导航组件
,它使您能够简单、高效地操作,您可以将所有片段放在一个图中,并从目的地中选择“片段在此处称为目的地”您可以使用actions和global actions“从一个片段到另一个片段在此处称为action”参数与其他片段和父对象进行通信,但此处不需要父对象的父对象,所有目的地及其父对象都可以共享一个ViewModel
,这将允许您共享应用程序周围的数据
如果听起来不错的话,你可以多读一些
public String TogetEventBirthdayFName (){
EditText FBirthdayName = rootView.findViewById(R.id.Edittext_birthDay_FirstName);
return FBirthdayName.getText().toString();
}
public String toGetFcoupleName(){
EditText FCoupleName = rootView.findViewById(R.id.textView_wedding_Name);
return FCoupleName.getText().toString();
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Spinner TypeEventSpinner = rootview.findViewById(R.id.type_event);
TypeEventSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
String tag_items = parent.getItemAtPosition(position).toString();
switch (tag_items){
case "Wedding":
frag_fr_event_wed = new fragment_fr_event_wedding();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_event_child_fragment, frag_fr_event_wed).disallowAddToBackStack().commit();
break;
case "Birthday":
fragment_fr_event_birthday = new fragment_fr_event_Birthday();
transaction = getChildFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_event_child_fragment , fragment_fr_event_birthday).disallowAddToBackStack().commit();
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
public String TogetWedChildFcoupleName(){
if(frag_fr_event_wed !=null){
frag_fr_event_wed = (fragment_fr_event_wedding) getChildFragmentManager().findFragmentById(R.id.fragment_event_child_fragment);
return frag_fr_event_wed.toGetFcoupleName();
}return "Empty";
}
public String TogetBirthdayFName(){
if(fragment_fr_event_birthday != null){
fragment_fr_event_birthday = (fragment_fr_event_Birthday) getChildFragmentManager().findFragmentById(R.id.fragment_event_child_fragment);
return fragment_fr_event_birthday.TogetEventBirthdayFName();
}
return "Empty";
}