Android Fragment getView()始终为FragmentStatePagerAdapter创建的片段返回null
我读了很多关于碎片的书。我发现其他人在检索片段视图时遇到问题,因为总是返回null,但没有回答解决了我的问题。我想做的是创建一个图像库。我有一个保存图像视图的片段。为了显示片段,我使用了android.support.v4.view.ViewPager。为了给Android Fragment getView()始终为FragmentStatePagerAdapter创建的片段返回null,android,android-layout,android-fragments,fragmentstatepageradapter,Android,Android Layout,Android Fragments,Fragmentstatepageradapter,我读了很多关于碎片的书。我发现其他人在检索片段视图时遇到问题,因为总是返回null,但没有回答解决了我的问题。我想做的是创建一个图像库。我有一个保存图像视图的片段。为了显示片段,我使用了android.support.v4.view.ViewPager。为了给ViewPager提供信息,我使用了android.support.v4.app.FragmentStatePagerAdapter 问题是,当所有内容都已构建并显示图像时,我希望将当前显示的图像保存到磁盘。因此,我需要获取当前的片段ima
ViewPager
提供信息,我使用了android.support.v4.app.FragmentStatePagerAdapter
问题是,当所有内容都已构建并显示图像时,我希望将当前显示的图像保存到磁盘。因此,我需要获取当前的片段imageview,但我不能,因为fragment.getView()始终为null,与片段关联的活动也为null,我不知道为什么为null。下面是一些代码,以查看是否有人可以在此提供帮助:
这是我的片段:
public class ImageViewURLFragment extends Fragment
{
String _url;
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState)
{
// The last two arguments ensure LayoutParams are inflated
// properly.
View rootView = new ImageViewURL(getActivity(), _url);
return rootView;
}
public void setImageURL(String imgURL)
{
_url=imgURL;
}
}
这是我的适配器:
public class ImageViewURLCustomAdapter extends FragmentStatePagerAdapter
{
List<String> _urls=new ArrayList<String>();
public ImageViewURLCustomAdapter(FragmentManager fm)
{
super(fm);
}
@Override
public Fragment getItem(int i)
{
ImageViewURLFragment fragment = new ImageViewURLFragment();
fragment.setImageURL(_urls.get(i));
return fragment;
}
public String getItemUrl(int i)
{
return _urls.get(i);
}
@Override
public int getCount() {
return _urls.size();
}
@Override
public CharSequence getPageTitle(int position) {
return "OBJECT " + (position + 1);
}
public void addImageURL(String url)
{
_urls.add(url);
}
}
抱歉来源太长,我已经清理了所有我能清理的东西,但是我想展示所有的角色。有人能猜出发生了什么吗
提前谢谢
所以我需要得到当前的片段图像视图,但我不能,因为
fragment.getView()始终为null,即与
片段也是空的,我不明白为什么是空的
这是因为您期望\u iva.getItem(index)
返回ViewPager
用于与指定索引对应的页面的片段。这不会发生,因为ViewPager
已经调用了getItem
方法来获取它所需的片段,并且在调用getItem
方法之后,您会得到一个新的ImageViewURLFragment
实例。此新实例未绑定到活动
(getActivity()
返回null
)并且未创建其视图
使用FragmentStatePagerAdapter
时,请尝试下面的代码以获取当前可见的片段
:
if (item.getItemId()==R.id.saveToSD) {
int index = _vp.getCurrentItem();
Fragment fragment = _vp.getAdapter().instantiateItem(_vp, index);
//...
在搜索了更多的信息之后,我想问一下您是如何获得有关InstanceItem的这些信息的。我的意思是,我已经读到这个适配器可以重用片段,而不是每次都创建一个新的片段,但是,您从哪里找到了我们可以直接调用InstanceItem的信息,这将返回片段的前一个实例,而不是新实例?另一方面,您如何为页面视图执行此操作(获取当前项目)?。提前感谢。@如果您查看FragmentStatePagerAdapter
的源代码,您将看到InstanceItem
方法将返回缓存的片段或新片段,这还不错。在这种情况下,当您查找当前片段时,它将是缓存的版本。另一方面,如何为页面视图执行此操作(获取当前项目)我不明白你在问什么。要从FragmentStatePagerAdapter获取当前片段,请使用我的答案代码。好的,谢谢。我认为阅读android源代码是一种常见的做法。再次感谢你的回答,太好了!谢谢你这一行,我一直在寻找。Fragment Fragment=\u vp.getAdapter().instanceItem(\u vp,index);即使超出此问题的范围,也可以正常工作:拇指支撑:
if (item.getItemId()==R.id.saveToSD) {
int index = _vp.getCurrentItem();
Fragment fragment = _vp.getAdapter().instantiateItem(_vp, index);
//...