Fragment getView () gibt für Fragmente, die von einem FragmentStatePagerAdapter erstellt wurden, immer null zurück
Ich habe viel über Fragmente gelesen. Habe festgestellt, dass andere Personen Probleme beim Abrufen der Fragmentansicht haben, weil immer null zurückgegeben wurde, aber keine Antwort mein Problem gelöst hat. Was ich versuche, ist eine Bildergalerie zu erstellen. Ich habe ein Fragment, das eine Bildansicht enthält. Zum Anzeigen der Fragmente verwende ich einen android.support.v4.view.ViewPager. Und die zu fütternViewPager
Ich benutze einandroid.support.v4.app.FragmentStatePagerAdapter
.
Das Problem ist, dass ich, wenn alles erstellt ist und die Bilder angezeigt werden, das aktuell angezeigte Bild auf der Festplatte speichern möchte. Ich muss also das aktuelle Fragment imageview abrufen, kann es aber nicht, da fragment.getView () immer null ist, die mit dem Fragment verbundene Aktivität ebenfalls null ist und ich nicht herausfinden kann, warum. Hier ein Code, um zu sehen, ob hier jemand helfen kann:
Das ist mein Fragment:
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;
}
}
Und das ist mein Adapter:
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);
}
}
Und dies ist die Hauptaktivität, beachte den Kommentar mit dem 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);
}
}
Entschuldigung für die langen Quellen, ich habe alles gesäubert, was ich konnte, aber ich wollte alle Spielparts präsentieren. Könnte jemand raten, was passiert?
Danke im Voraus.