Not*_*bad 9 android android-layout android-fragments fragmentstatepageradapter
我一直在读很多片段.发现其他人在检索片段视图时遇到问题,因为总是返回null,但没有答案解决了我的问题.我要做的是创建一个图库.我有一个包含图像视图的片段.为了显示片段,我使用了android.support.v4.view.ViewPager.而喂ViewPager
我使用一个android.support.v4.app.FragmentStatePagerAdapter
.
问题是,当所有内容都构建并显示图像时,我想将当前显示的图像保存到磁盘.所以我需要得到当前的片段imageview,但我不能,因为fragment.getView()总是为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;
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的适配器:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
这是主要活动,请注意带有get的注释:
public class MainActivity extends FragmentActivity
{
ImageViewURLCustomAdapter _iva=null;
ViewPager _vp=null;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
_iva = new ImageViewURLCustomAdapter(
getSupportFragmentManager());
_iva.addImageURL("http://upload.wikimedia.org/wikipedia/commons/b/b4/Saturn_(planet)_large.jpg");
_iva.addImageURL("http://planetthreesixty.com/sites/default/files/planet.jpg");
_vp = (ViewPager) findViewById(R.id.viewpager);
_vp.setAdapter(_iva);
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
if(item.getItemId()==R.id.saveToSD)
{
int index= _vp.getCurrentItem();
Fragment fragment=_iva.getItem(index);
//THis is where I need to get fragment view, but always returns null
View view= fragment.getView();
ImageView iv=(ImageView)view.findViewWithTag("imageView");
Bitmap bmp=iv.getDrawingCache();
}
return super.onOptionsItemSelected(item);
}
}
Run Code Online (Sandbox Code Playgroud)
很抱歉,我已经清理了所有可能的东西,但我想展示所有游戏部分.谁能猜到什么是hapenning?
提前致谢.
Luk*_*rog 32
所以我需要得到当前的片段imageview,但我不能,因为fragment.getView()总是为null,与片段相关的活动也是null,我无法弄清楚它为什么.
这种情况正在发生,因为您希望_iva.getItem(index);
返回对应于指定索引的页面Fragment
的ViewPager
用途.这不会发生,因为ViewPager
已经调用了getItem
获取所需片段的方法,并且在调用该getItem
方法后,您将获得一个新ImageViewURLFragment
实例.此新实例与Activity
(getActivity()
返回null
)无关,并且未创建其视图.
当您使用FragmentStatePagerAdapter
下面的代码尝试获取当前可见的代码Fragment
:
if (item.getItemId()==R.id.saveToSD) {
int index = _vp.getCurrentItem();
Fragment fragment = _vp.getAdapter().instantiateItem(_vp, index);
//...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14604 次 |
最近记录: |