3 回答

TA貢獻1801條經驗 獲得超16個贊
是的,您可以將數據傳遞給片段但不使用意圖而是使用捆綁包,因此必須稍微修改代碼。試試下面的代碼片段
? ? Bundle bundle1,bundle2;
? ? ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
? ? ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
? ? Home frag1 = new Home();
? ? Grade frag2 = new Grade();
? ? bundle1 = new Bundle();
? ? bundle1.putString("key",data); //pass the data you want to pass
? ? bundle2 = new Bundle();
? ? bundle2.putString("key",data);
? ? frag1.setArguments(bundle1);//set arguments require a bundle?
? ? frag2.setArguments(bundle2);//set arguments require a bundle?
? ? adapter.addFragment(frag1, "Fragment I");
? ? adapter.addFragment(frag2, "Fragment II");
? ? viewPager.setAdapter(adapter);
? ? TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
? ? tabLayout.setupWithViewPager(viewPager);
? ?//Inside the fragments create another bundle
? ? Bundle b = getIntent().getExtras();
? ? String data = b.getString("key");

TA貢獻1876條經驗 獲得超7個贊
這是解決方案,您必須在 Activity A 中創建 2 個方法
1. passIntent1()
private void passIntent1(){
Intent intent = new Intent(getBaseContext(), SecondActivity.class);
intent.putExtra("INTENT_VALUE", "A");
intent.putExtra("FRAGMENT_A", value for A);
startActivity(intent);
}
2. passIntent2()
private void passIntent2(){
Intent intent = new Intent(getBaseContext(), SecondActivity.class);
intent.putExtra("INTENT_VALUE", "B");
intent.putExtra("FRAGMENT_B", value for B);
startActivity(intent);
}
現在,在 B 活動中,獲取您的 Intent
String value = getIntent().getStringExtra("INTENT_VALUE");
if(value.equalsIgnoreCase("A")){
String FragA = getIntent().getStringExtra("FRAGMENT_A");
}else if(value.equalsIgnoreCase("B")){
String FragB = getIntent().getStringExtra("FRAGMENT_B");
}
現在將值 FragA 傳遞給片段 A,將 FragB 傳遞給片段 B
更新代碼如下
在 Activity 中使用下面的代碼在片段中傳遞值。您必須使用 Bundle 將數據傳遞給片段
Home home = new Home();
Bundle homeBundle = new Bundle();
homeBundle.putString("KEY","VALUE");
// Your Key must same when you get your values in Fragment Home
home.setArguments(homeBundle);
同樣,您對 Fragment Grade 也做了同樣的事情
Grade grade = new Grade();
Bundle gradeBundle = new Bundle();
gradeBundle.putString("KEY","VALUE");
grade.setArguments(gradeBundle);
將片段添加到適配器
adapter.addFragment(home, "Fragment I");
adapter.addFragment(grade, "Fragment II");
現在在 Fragment 中,使用下面的代碼獲取值
Bundle bundle = getArguments();
if(bundle!=null){
String value = bundle.getString("KEY");
}
希望,現在您可以更好地理解。

TA貢獻1802條經驗 獲得超5個贊
就我而言,我在 ActivityA 中有一個 fragmentA,它位于 RecyclerView 中。我想將一個 ID 傳遞給位于 ActivityB 和 ViewPager 內的另一個 fragmentB。我所做的是將 FragmentA 和 Intent 傳遞給 ActivityB
Intent intent = new Intent(getContext(), EachRoomActivity.class);
intent.putExtra("room_id", data.getId());
startActivity(intent);
在 ActivityB 的 onCreate() 方法中,我得到了 intentExtra
Intent intent = getIntent();
String room_id = intent.getStringExtra("room_id");
這是我定義具有 TabLayout 片段的 Viewpager 的地方。在 ViewPagerAdapter 構造函數中,我添加了對 ID 的要求
public EachRoomViewPagerAdapter(@NonNull FragmentManager fm, String room_id) {
super(fm);
this.room_id = room_id;
}
因此,在我為 ViewPager 切換視圖時,我將 Bundle Extra 添加到片段中。
@NonNull
@Override
public Fragment getItem(int position) {
Fragment fragment = null;
Bundle args = new Bundle();
args.putString("room_id", room_id);
switch (position) {
case 1:
fragment = new EachRoomMySubscriptionsFragment();
fragment.setArguments(args);
break;
case 2:
fragment = new EachRoomSchedulledEventsFragment();
fragment.setArguments(args);
break;
case 3:
fragment = new EachRoomPreviousEventsFragment();
fragment.setArguments(args);
break;
default:
fragment = new EachRoomAllEventsFragment();
fragment.setArguments(args);
}
return fragment;
}
現在,在 Fragment 的 OnCreateView() 方法中,我得到了 Bundle Extra
Bundle bundle = getArguments();
if(bundle!=null){
room_id = bundle.getString("room_id");
}
就是這樣。
添加回答
舉報