Parçalar hakkında çok şey okudum. Fragmanları görüntülemede sorun yaşayan başka insanlar bulmuşlardır, çünkü null her zaman geri döndü, fakat cevabım sorunumu çözmedi. Yapmaya çalıştığım bir resim galerisi oluşturmak. Resim görünümünde bir Parçam var. Fragmanı göstermek için bir android.support.v4.view.ViewPager kullanıyorum. Ve ViewPager
'u beslemek için android.support.v4.app.FragmentStatePagerAdapter
kullanıyorum.Parça getView() her zaman FragmentStatePagerAdapter tarafından oluşturulan Fragments için null değerini döndürüyor
Sorun şu ki, her şey oluşturulduğunda ve resimler gösterildiğinde mevcut gösterilen görüntüyü diske kaydetmek istiyorum. Bu yüzden, şimdiki fragman görüntüsü görüntüsünü almam gerekiyor ama yapamıyorum çünkü fragment.getView() her zaman boş, parçayla ilişkili etkinlik de boş ve neden olduğunu anlayamıyorum. Bu
benim Fragment geçerli::
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;
}
}
Ve bu benim adaptör: kimse burada yardımcı olabilir İşte bazı kod görmeye
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);
}
}
Ve bu ana faaliyettir ile yorumunu fark 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);
}
}
Uzun kaynaklardan dolayı özür dilerim, elimden geleni yaptım, ama önceden yapmak istedim tüm oyun parçalarını yolladı. Hapenning'in ne olduğunu tahmin eden var mı?
Şimdiden teşekkürler.
Teşekkür bunun için çok. – Notbad
Daha fazla bilgi için arama yaptıktan sonra, bu bilginin nasıl elde edildiğini sormak istiyorum. Bu adaptörün her seferinde yeni bir tane oluşturmak yerine fragmanları yeniden kullanabileceğini okumuştum ama nereden bulabileceğimizi nereden öğrendiniz? örneği doğrudan arayın ve bunun parçanın önceki bir örneğini döndüreceğini ve yeni bir tane döndürmeyeceğini? Ve öte yandan bunu nasıl yaparsınız (mevcut öğeyi) PageView için. Şimdiden teşekkürler. – Notbad
@Notbad "FragmentStatePagerAdapter" için kaynak koduna bakarsanız, "instantiateItem" yönteminin önbelleğe alınmış bir parçayı veya yeni bir parçayı döndüreceğini görürsünüz. Mevcut parçayı ararken, önbelleklenmiş versiyon olacaktır. * Ve öte yandan bunu nasıl yapardın (şimdiki öğeyi) bir PageView için? * - Ne istediğini anlamıyorum. Geçerli parçayı bir FragmentStatePagerAdapter'den almak için kodumu cevaptan kullanırdım. – Luksprog