如何将 Intent Extras 传递给来自 PreviousActivity 的 Activity viewpager 内的多个片段
How to pass intent extras to multiple fragment inside Activity viewpager from PreviousActivity
我有两个 Activity Activity A 和 B。
Activity B 包含有两个片段的 viewpager,片段 I 和 片段 II。我正在寻找一种解决方案来传递两个单独的 intent extra,即来自 [=50= 的 intent extras_one 和 intentextra_two ] A 到 B 并加载第一个 intent extras 在 Fragment I 和第二个 intent_extras 片段二
这可能吗。
这是我在 Activity B
中的 viewpager
ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFragment(new Home(), "Fragment I");
adapter.addFragment(new Grade(), "Fragment II");
viewPager.setAdapter(adapter);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
}
我现在正在使用 case 语句在 Activity A 中传递参数。
case 0:
Intent math_strt = new Intent(itemView.getContext(), MainActivity.class);
math_strt.putExtra(EXTRA_URL, "https://api.myjson.com/bins/16mecx");
itemView.getContext().startActivity(math_strt);
break;
提前致谢。
这是解决方案,您必须在 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 内部 Activity,获取您的 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 将数据传递给片段[=16=]
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);
同样你对碎片等级也做了同样的事情
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");
现在在 side Fragment 中,使用下面的代码获取值
Bundle bundle = getArguments();
if(bundle!=null){
String value = bundle.getString("KEY");
}
希望,现在你理解得更好了。
是的,您可以将数据传递给片段,但不使用意图而是使用捆绑包,因此必须稍微修改代码。试试下面的代码片段
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");
可以找到有关捆绑包的更多信息Here
就我而言,我在 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 添加到 Fragment。
@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");
}
就是这样。
我有两个 Activity Activity A 和 B。 Activity B 包含有两个片段的 viewpager,片段 I 和 片段 II。我正在寻找一种解决方案来传递两个单独的 intent extra,即来自 [=50= 的 intent extras_one 和 intentextra_two ] A 到 B 并加载第一个 intent extras 在 Fragment I 和第二个 intent_extras 片段二
这可能吗。
这是我在 Activity B
中的 viewpager ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFragment(new Home(), "Fragment I");
adapter.addFragment(new Grade(), "Fragment II");
viewPager.setAdapter(adapter);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
}
我现在正在使用 case 语句在 Activity A 中传递参数。
case 0:
Intent math_strt = new Intent(itemView.getContext(), MainActivity.class);
math_strt.putExtra(EXTRA_URL, "https://api.myjson.com/bins/16mecx");
itemView.getContext().startActivity(math_strt);
break;
提前致谢。
这是解决方案,您必须在 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 内部 Activity,获取您的 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 将数据传递给片段[=16=]
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);
同样你对碎片等级也做了同样的事情
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");
现在在 side Fragment 中,使用下面的代码获取值
Bundle bundle = getArguments();
if(bundle!=null){
String value = bundle.getString("KEY");
}
希望,现在你理解得更好了。
是的,您可以将数据传递给片段,但不使用意图而是使用捆绑包,因此必须稍微修改代码。试试下面的代码片段
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");
可以找到有关捆绑包的更多信息Here
就我而言,我在 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 添加到 Fragment。
@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");
}
就是这样。