Ich habe viel über Fragmente gelesen. Habe andere Leute gefunden, die Probleme beim Abrufen der Fragmentansicht haben, weil null immer zurückgegeben wurde, aber keine Antwort mein Problem gelöst hat. Ich versuche eine Bildergalerie zu erstellen. Ich habe ein Fragment, das eine Bildansicht enthält. Um die Fragmente anzuzeigen, benutze ich einen android.support.v4.view.ViewPager. Und um die ViewPager
zu füttern benutze ich eine android.support.v4.app.FragmentStatePagerAdapter
.Fragment getView() liefert immer Null für Fragmente, die von einem FragmentStatePagerAdapter erstellt wurden
Das Problem ist, dass wenn alles erstellt wird und die Bilder angezeigt werden, ich das aktuell angezeigte Bild auf der Festplatte speichern möchte. Also muss ich das aktuelle Fragment Imageview holen, aber ich kann nicht, weil fragment.getView() immer Null ist, die Aktivität, die mit dem Fragment verbunden ist, ist auch null und ich kann nicht herausfinden, warum es ist. Hier einige Code, um zu sehen, ob jemand hier helfen könnte:
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 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 das ist die Haupttätigkeit, beachten Sie den Kommentar mit Das bekommen:
Sorry für die langen Quellen, ich habe alles geputzt was ich konnte, wollte ich aber vorbestellen schickte alle spielenden Teile. Könnte irgendjemand raten, was gerade passiert?
Vielen Dank im Voraus.
Vielen Dank dafür. – Notbad
Nachdem ich nach weiteren Informationen gesucht habe, möchte ich fragen, wie Sie diese Informationen über instantiateItem erhalten haben. Ich meine, dass dieser Adapter Fragmente wiederverwenden kann, anstatt jedes Mal ein neues zu erstellen, aber wo haben Sie Informationen gefunden, die wir könnten Rufen Sie instantiateItem direkt auf und dass dies eine vorherige Instanz des Fragments und nicht eine neue zurückgeben würde? Und auf der anderen Seite, wie würden Sie dies tun (aktuelles Element) für ein PageView ?. Danke im Voraus. – Notbad
@Notbad Wenn Sie sich den Quelltext für den 'FragmentStatePagerAdapter' anschauen, werden Sie sehen, dass die' instanziateItem' Methode entweder ein zwischengespeichertes Fragment oder ein neues Fragment zurückgibt. Wenn Sie nach dem aktuellen Fragment suchen, wird es die zwischengespeicherte Version sein. * Und auf der anderen Seite, wie würdest du das machen (aktuelles Item bekommen) für einen PageView? * - Ich verstehe nicht, was du verlangst. Um das aktuelle Fragment von einem FragmentStatePagerAdapter zu erhalten, würden Sie meinen Code aus der Antwort verwenden. – Luksprog