无法将 intent extras 从 Activity 传递到 Viewpager 内的片段

Unable to pass intent extras from Activity to fragment inside Viewpager

我正在使用 ViewPagerTabLayout 来显示两个片段。我从之前的 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

希望对您有所帮助!