无法将 intent extras 从 Activity 传递到 Viewpager 内的片段
Unable to pass intent extras from Activity to fragment inside Viewpager
我正在使用 ViewPager
和 TabLayout
来显示两个片段。我从之前的 activity 中得到一个 URL 作为额外的意图,并将它们作为当前 activity 的参数传递给片段。但是在片段中,我没有得到任何 Bundle
并且在片段中使用 toast 消息时,它显示为 null。
这是我的 MainActivity
代码
ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
String url_one = getIntent().getStringExtra(EXTRA_URL);
// I'm getting this Toast as url sucessfully
Toast.makeText(this, url_one, Toast.LENGTH_LONG).show();
Mylecture f = new Mylecture();
Bundle args = new Bundle();
args.putString("key_one", url_one);
f.setArguments(args);
adapter.addFragment(new Mylecture(), "Lectures");
viewPager.setAdapter(adapter);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
在片段中,我使用
Bundle bundle = getArguments();
if(bundle != null) {
url = bundle.getString("key_one");
} else {
Toast.makeText(getActivity(), "Bundle is empty", Toast.LENGTH_LONG).show();
}
这个returns Bundle
是空的。
我该如何解决这个问题?提前致谢。
当您在 ViewPager
中添加片段时,您实际上并没有将片段传递到放置捆绑包的位置,这就是为什么您的片段中没有得到任何东西的原因。
您需要执行以下操作。
Mylecture f = new Mylecture();
Bundle args = new Bundle();
args.putString("key_one", url_one);
f.setArguments(args);
// adapter.addFragment(new Mylecture(), "Lectures"); // Do not new a fragment
adapter.addFragment(f, "Lectures"); // Use this instead
希望对您有所帮助!
我正在使用 ViewPager
和 TabLayout
来显示两个片段。我从之前的 activity 中得到一个 URL 作为额外的意图,并将它们作为当前 activity 的参数传递给片段。但是在片段中,我没有得到任何 Bundle
并且在片段中使用 toast 消息时,它显示为 null。
这是我的 MainActivity
ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
String url_one = getIntent().getStringExtra(EXTRA_URL);
// I'm getting this Toast as url sucessfully
Toast.makeText(this, url_one, Toast.LENGTH_LONG).show();
Mylecture f = new Mylecture();
Bundle args = new Bundle();
args.putString("key_one", url_one);
f.setArguments(args);
adapter.addFragment(new Mylecture(), "Lectures");
viewPager.setAdapter(adapter);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
在片段中,我使用
Bundle bundle = getArguments();
if(bundle != null) {
url = bundle.getString("key_one");
} else {
Toast.makeText(getActivity(), "Bundle is empty", Toast.LENGTH_LONG).show();
}
这个returns Bundle
是空的。
我该如何解决这个问题?提前致谢。
当您在 ViewPager
中添加片段时,您实际上并没有将片段传递到放置捆绑包的位置,这就是为什么您的片段中没有得到任何东西的原因。
您需要执行以下操作。
Mylecture f = new Mylecture();
Bundle args = new Bundle();
args.putString("key_one", url_one);
f.setArguments(args);
// adapter.addFragment(new Mylecture(), "Lectures"); // Do not new a fragment
adapter.addFragment(f, "Lectures"); // Use this instead
希望对您有所帮助!