片段 getArguments() 返回 null
Fragment getArguments() is returning null
出于某种原因,包含字符串数组的片段包在片段的 oncreate 方法中变为空。我试图在创建片段时传递一个 url 数组,以便在我向它提供不同的图像 url 时它在 imageviews 中呈现不同的图像。我最初是在构造函数中这样做的,但是 android 不喜欢我使用的构造函数不是默认构造函数这一事实。我假设错误可能是由于在将包传递给片段之前调用了片段的 oncreate 方法,但我不知道如何在不通过构造函数的情况下更快地将信息传递到片段中。
这是片段被实例化的代码。
private void initViewPager() {
viewPager = (ViewPager) findViewById(R.id.view_pager);
List<Fragment> listFragments = new ArrayList<Fragment>();
for(int i = 0; i < tabNames.length; i++)
{
Bundle bundle = new Bundle();
ImageViewerFragment imageViewerFragment = new ImageViewerFragment();
listFragments.add(imageViewerFragment);
switch(tabNames[i])
{
case "All":
bundle.putStringArray("urls", URLS.randomURLs);
break;
case "Zombie":
bundle.putStringArray("urls", URLS.zombieURLS);
break;
case "Captain":
bundle.putStringArray("urls", URLS.captainURLS);
break;
case "Awesome":
bundle.putStringArray("urls", URLS.awesomeURLS);
break;
}
}
MyFragmentPagerAdapter myFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager(), listFragments);
viewPager.setAdapter(myFragmentPagerAdapter);
viewPager.addOnPageChangeListener(this);
}
我的片段Class
public class ImageViewerFragment extends Fragment {
GridView mGridView;
ImageAdapter mImageAdapter;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.imageviewerfragment_layout, container, false);
mGridView = (GridView) view.findViewById(R.id.grid_view);
mImageAdapter = new ImageAdapter(getActivity(), getArguments().getStringArray("urls"));
mGridView.setAdapter(mImageAdapter);
return view;
}
}
您没有将 bundle
设置为片段。你没有打电话给 imageViewerFragment.setArguments(bundle);
出于某种原因,包含字符串数组的片段包在片段的 oncreate 方法中变为空。我试图在创建片段时传递一个 url 数组,以便在我向它提供不同的图像 url 时它在 imageviews 中呈现不同的图像。我最初是在构造函数中这样做的,但是 android 不喜欢我使用的构造函数不是默认构造函数这一事实。我假设错误可能是由于在将包传递给片段之前调用了片段的 oncreate 方法,但我不知道如何在不通过构造函数的情况下更快地将信息传递到片段中。
这是片段被实例化的代码。
private void initViewPager() {
viewPager = (ViewPager) findViewById(R.id.view_pager);
List<Fragment> listFragments = new ArrayList<Fragment>();
for(int i = 0; i < tabNames.length; i++)
{
Bundle bundle = new Bundle();
ImageViewerFragment imageViewerFragment = new ImageViewerFragment();
listFragments.add(imageViewerFragment);
switch(tabNames[i])
{
case "All":
bundle.putStringArray("urls", URLS.randomURLs);
break;
case "Zombie":
bundle.putStringArray("urls", URLS.zombieURLS);
break;
case "Captain":
bundle.putStringArray("urls", URLS.captainURLS);
break;
case "Awesome":
bundle.putStringArray("urls", URLS.awesomeURLS);
break;
}
}
MyFragmentPagerAdapter myFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager(), listFragments);
viewPager.setAdapter(myFragmentPagerAdapter);
viewPager.addOnPageChangeListener(this);
}
我的片段Class
public class ImageViewerFragment extends Fragment {
GridView mGridView;
ImageAdapter mImageAdapter;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.imageviewerfragment_layout, container, false);
mGridView = (GridView) view.findViewById(R.id.grid_view);
mImageAdapter = new ImageAdapter(getActivity(), getArguments().getStringArray("urls"));
mGridView.setAdapter(mImageAdapter);
return view;
}
}
您没有将 bundle
设置为片段。你没有打电话给 imageViewerFragment.setArguments(bundle);