Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Fragment getView()始终为FragmentStatePagerAdapter创建的片段返回null_Android_Android Layout_Android Fragments_Fragmentstatepageradapter - Fatal编程技术网

Android Fragment getView()始终为FragmentStatePagerAdapter创建的片段返回null

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

我读了很多关于碎片的书。我发现其他人在检索片段视图时遇到问题,因为总是返回null,但没有回答解决了我的问题。我想做的是创建一个图像库。我有一个保存图像视图的片段。为了显示片段,我使用了android.support.v4.view.ViewPager。为了给
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);
     //...