Java 子片段的过去值->;mainactivity无法将fragment\u fr\u event\u Birth强制转换为fragment\u fr\u event\u婚礼android studio

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)

我在mainActivity中有一个片段,该片段包含fragmentcontainerView,可以用spinner onselectedListener替换多个子片段。我希望能够通过以下方式从子片段传递这些值:
fragmentevent.TogetFName()。在父片段中,我使用
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";
    }