麻烦将对象片段传递给片段

时间:2015-07-10 02:26:36

标签: android android-fragments

我正在尝试传递一个对象Fragment - >活动 - >分段。

My 2nd Fragment在获取参数时说我的对象为null:

片段A :(发送对象,通信器是主要活动的接口)

@Override
public void sendMeetToMeetProfile(Meet meet) {
    MeetAthletesListContainer meetAthletesListContainer = new MeetAthletesListContainer();

    ***** Fragment is not replaced just called *******
    MeetAthletesMales meetAthletesMales = new MeetAthletesMales();
    MeetAthletesFemales meetAthletesFemales = new MeetAthletesFemales();
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

    Bundle bundleMales = new Bundle();
    bundleMales.putParcelable("meetAthletesMales", meet);
    meetAthletesMales.setArguments(bundleMales);
    Bundle bundleFemales = new Bundle();
    bundleFemales.putParcelable("meetAthletesFemales", meet);
    meetAthletesFemales.setArguments(bundleFemales);

    ******* Replaces current fragment with container that contains above (2) fragments *******
    transaction.replace(R.id.frameLayout, meetAthletesListContainer, "meetAthletesListContainer");
    transaction.addToBackStack(null);
    transaction.commit();
}

主要活动:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    view = inflater.inflate(R.layout.fragment_meet_athletes_males, container, false);
    Log.e("", "Fragment onCreateView Called!");

    initializeVar();
    *****Says this meet object is null*****
    meet = getArguments().getParcelable("meetAthletesMales");
}

片段B :(片段包含在另一个片段中)

{{1}}

我正在用另一个片段替换片段,但是将对象传递给另一片段内的片段(meet_container_fragment)。所以我的对象被直接发送到片段。我在另一个实际替换片段的实例中使用了这个,但是我想要替换FRAGMENT CONTAINER,而不是实际的片段B

2 个答案:

答案 0 :(得分:0)

试试这个

  MeetAthletesListContainer meetAthletesListContainer = new MeetAthletesListContainer();

        ***** Fragment is not replaced just called *******
        MeetAthletesMales meetAthletesMales = new MeetAthletesMales();
        MeetAthletesFemales meetAthletesFemales = new MeetAthletesFemales();
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

        Bundle bundle = new Bundle();
        bundle.putParcelable("meetAthletesMales", meet);
        bundle.putParcelable("meetAthletesFemales", meet);
        meetAthletesFemales.setArguments(bundle);

        ******* Replaces current fragment with container that contains above (2) fragments *******
        transaction.replace(R.id.frameLayout, meetAthletesListContainer, "meetAthletesListContainer");
        transaction.addToBackStack(null);
        transaction.commit();

答案 1 :(得分:0)

试试这个,

主要活动

     FragmentB fragmentb = FragmentB.newInstance(appContext,meet);
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
     fragmentTransaction.add(R.id.contentContainer, fragmentb , tag);

片段B

    public static FragmentB newInstance(AppContext appContext, Meet meet) {
    FragmentB fragment = new FragmentB();
    Bundle args = new Bundle();
    args.putSerializable(ARG_APP_CONTEXT, appContext);
    args.putString(ARG_MEET_NAME, meet.name);

}

@Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
    if (getArguments() != null) {
        appContext = (AppContext) getArguments().get(ARG_APP_CONTEXT);
        name= getArguments().getString(ARG_MEET_NAME);
         }
}

也使Meet实现Serializable

相关问题