Ich verwende einen ViewPager, um nur einen Teil eines Bildschirms zu wischen (im Gegensatz zur gesamten Ansicht/Seite).Android ViewPager zeigt zweite Seite nicht an?
Ich kann IsViewFromObject hacken, um nur wahr zurückzukehren, und dann mein erstes Bild erscheint, aber mein zweites Bild wird nicht geladen. Irgendwelche Gedanken darüber, was ich hier vermisse? Ich denke, dass immer noch etwas mit meiner isViewFromObject-Methode oder meiner for-Schleife im Instantiate-Element falsch ist.
Hinweis: ZWINGEND NICHT verwendet erweitert FragmentStatePagerAdapter und Erweiterung regulären PagerAdapter.
private class ScreenSlidePagerAdapter extends PagerAdapter {
public ScreenSlidePagerAdapter() {}
@Override
public Object instantiateItem (ViewGroup container, int position) {
LayoutInflater inflater = (LayoutInflater) container.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
int RLayoutId;
RLayoutId = R.layout.images_to_show; //an XML with just a LinearLayout
ViewGroup imageLayout = (ViewGroup) inflater.inflate(RLayoutId, null);
for (position = 0; position < mImageURLArraylist.size(); position++) {
container.addView(insertPhoto("http:" + mImageURLArraylist.get(position)));
}//end of for loop
return imageLayout;
}
@Override
public boolean isViewFromObject (View view, Object obj) { //Object parameter is received from instantiateItem(ViewGroup, int)
//loads the first image successfully if i just do return true.
//doesn't load any of my images when I do return view == ((View) obj);
}
//one of four methods that you must override when using pageradapters
@Override
public int getCount() {
//tested in debugging and this has the correct size (2)
return mImageURLArraylist.size(); //the number of pages the adapter will create.
}
@Override
public void destroyItem (ViewGroup container, int position, Object object) {
container.removeView((LinearLayout) object);
}//end of ScreenSlidePagerAdapter
Meine insertPhoto Methode, die in instantiateItem oben ausgeführt ist:
public View insertPhoto(String path){
LinearLayout layout = new LinearLayout(getActivity());
layout.setGravity(Gravity.CENTER);
ImageView imageView = new ImageView(getActivity());
imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
Picasso.with(getActivity()).load(path).into(imageView); //tried this but got errors when running > resize(layout.getWidth(), layout.getHeight()), also tried .fit() after .load image wouldn't load
layout.addView(imageView);
return layout;
}
Das hat funktioniert! Vielen Dank Giso! Dumb Follow-up-Frage, wenn ich, wenn ich die Ansicht zu einem linearen Layout hinzufügen würde, würde ich eine for-Schleife benötigen. Warum ich nicht hier/wie es iteriert über alle Elemente (d. H. Bilder) ohne eine For-Schleife? – Noobprogrammer
@NoobProgrammer: Es tut es nicht. Der ViewPager funktioniert anders. Tatsächlich werden nicht alle Seiten sofort geladen. Stattdessen instanziiert es nur die benachbarten Seiten und zerstört sogar Seiten weiter weg, um Speicher zu sparen. Wie viele Seiten im Speicher gehalten werden, kann mit [setOffscreenPageLimit()] gesteuert werden (http://developer.android.com/reference/android/support/v4/view/ViewPager.html#setOffscopePageLimit%28int%29) –