1

Also, ich habe ein Fragment mit einer ViewPager inside it. Ich möchte das Bild des Layouts im ViewPager durch das Fragment ändern.Change ImageView Drawable in ViewPager

Um dies zu tun, ich habe den folgenden Code geschrieben:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    v = inflater.inflate(R.layout.fragment_tab,container,false); //fragment layout 
    imageLayout = inflater.inflate(R.layout.view_image, null, false); //layout that's used in viewPager 
    theImage = (ImageView) imageLayout .findViewById(R.id.image); //getting the ImageView 

    ViewPager viewPager = (ViewPager) v.findViewById(R.id.resultImagesPager); 
    viewPager.setAdapter(new ResultImageAdapter(getActivity())); 
    } 

Der Code selbst meine App nicht abstürzt, aber egal, was ich schreibe, kann ich nicht die Bitmap von Image

+0

Versuch: theImage = (Image) v.findViewById (R.id .Bild); –

+0

Das würde nicht funktionieren, da 'R.id.image' in' view_image.xml' deklariert ist, nicht 'fragment_tab.xml' –

+0

, aber wie Marlen geschrieben hat, wird ViewPager hier nicht aufgeblasen. Wo bläst du es auf? –

Antwort

1

Sie sollten ziehbar innerhalb von ViewPager Adapter ändern.
In diesem Fall kann der Adapter wie folgt aussehen:

private List<YourObject> mList; 
    // pass list of items into constructor 
    public CustomPagerAdapter(Context context, List<YourObject> list) { 
     mContext = context; 
     mList = list; 
    } 

    @Override 
    public Object instantiateItem(ViewGroup collection, int position) { 
     CustomPagerEnum customPagerEnum = CustomPagerEnum.values()[position]; 
     LayoutInflater inflater = LayoutInflater.from(mContext); 
     ViewGroup layout = (ViewGroup) inflater.inflate(customPagerEnum.getLayoutResId(), collection, false); 
     // get corresponding object and retrieve needed drawable 
     YourObject yourObject = mList.get(position); 
     ImageView theImage = (ImageView) layout.findViewById(R.id.image); 
     theImage.setImageDrawable(yourObject.getYourDravwable()); 

     collection.addView(layout); 
     return layout; 
    } 

    @Override 
    public int getCount() { 
     return mList.size(); 
    } 

...

und in Ihrem Fragment:

List<YourObject> list = new ArrayList<>(); 
// add your objects or whatever 
list.add(new YourObject(name, drawable); 
viewPager.setAdapter(new ResultImageAdapter(getActivity(), list)); 
+0

Sie haben meine danke –

+0

Sie sind willkommen) –

0
ändern

in dieser Linie erstellen Sie gerade neue Instanz von R.layout.view_image, und das erzeugte Ansicht auf jedem Behälter hinzugefügt

imageLayout = inflater.inflate(R.layout.view_image, null, false); 
+0

Also sagen Sie, dass ich den Code schreibe am falschen Ort? Ich meine, im Moment funktioniert mein Code vermutlich so: ViewPager enthält 'view_image.xml' mit Standardbild -> Fragment.java greift auf' view_image.xml' zu und ändert das Bild darin -> ViewPager hat jetzt 'view_image.xml' mit geändertes Bild –

+0

v = inflater.inflate (R.layout.fragment_tab, container, false); Auf diesem Inflator setzen Sie den Container (zweiter Parameter). Wenn inflater ein Layout aus XML erstellt, fügt er dieses Layout dem Container hinzu, aber Sie haben imageLayout ohne Container erstellt und dieses Layout wurde nur im Speicher erstellt, aber nicht auf dem Bildschirm angezeigt. – Marlen