2015-07-10 60 views
-1

我想传递一个对象片段 - >活动 - >片段。麻烦传递对象片段到片段

我的第二个片段说让争论时,我的目标是零:

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

meetsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { 
      Meet meet = new Meet(); 
      meet = meetList.get(position); // meet is not null here 
      communicator.changeToolbarTitle(meet.getName()); 

      ****** Sends Meet object to main activity ******** 
      communicator.sendMeetToMeetProfile(meet); 
     } 
    }); 

主要活动:

@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(); 
} 

片段B :(片段包含在另一片段内)

@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"); 
} 

我正在用另一个替换片段,但将对象传递给另一片段(meet_container_fragment)内的片段。所以我的对象被直接发送到片段。我在另一种情况下这个工作,我实际上取代片段,但我想更换片段的容器,而不是实际的B片段

+0

transaction.replace将删除所有片段,并添加新的片段。也许使用transaction.add? – zzas11

回答

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(); 
+0

我不认为你真的在这里改变任何东西 –

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); 
     } 
} 

也使满足实现Serializable

+0

我会尝试这个,但想知道是否添加/替换不同片段而不是片段B将对片段B获得捆绑包产生影响。在我的程序中,片段B包含在另一个片段中,我将替换 –

+0

尝试使用replace.It正在为我工​​作.. –