2017-06-29 4 views
0

Ich habe einen einfachen Viewpager mit ein paar Ansichten. Ich habe eine Schaltfläche in jeder Ansicht, die einmal die Hintergrundfarbe der Ansicht auf eine vorher festgelegte Farbe ändern sollte.Viewpager "ViewGroup" ändern Hintergrundfarbe Laufzeit

In meinem instantiateItem habe ich folgendes:

public CustomPagerAdapter(Context context) { 
    mContext = context; 
} 

@Override 
public Object instantiateItem(ViewGroup collection, int position) { 
    LayoutInflater inflater = LayoutInflater.from(mContext); 
    ViewGroup layout = (ViewGroup) inflater.inflate(R.layout.child_item, collection, false); 

    PopulateView(position); 
    collection.addView(layout); 
    return layout; 
} 

habe ich eine andere Funktion (PopulateView), die meiner Ansicht nach der Zeichnung und die Schaffung der Taste übernimmt.

Ich dachte daran, eine Instanz von "ViewGroup layout" als Klassenvariable beizubehalten und sie zu verwenden, aber das Klicken auf die Schaltfläche in Ansicht 1 würde dazu führen, dass sich eine zufällige Ansicht (zB Ansicht 2) ändert.

Also hielt ich eine Kopie von „Viewgroup Sammlung“ und verwendet

collection.getChildAt(position).setBackgroundColor(mContext.getResources().getColor(sky)); 

aber die App mit dem Fehler java.lang.NullPointerException auf der letzten Ansicht Farbänderung würde abstürzen: Der Versuch, virtuelle Methode aufzurufen ' nichtig android.view.View.setBackgroundColor (int)‘auf einer null-Objekt Referenz

collection = {[email protected]} "android.support.v4.view.ViewPager{e1f06a0 VFED..... ......ID 0,0-1080,1536 #7f0d0091 app:id/viewpager}" 
mContext = {[email protected]} 
position = 2 

Das merkwürdigste ist, wenn ich nach innen schauen‚Sammlung‘, und erweitern Sie die‚Kinder‘gibt es nur 2 Kinder aufgeführt. Es sollte 3 sein. Ich kann nicht verstehen, warum das so ist.

Kann jemand mir bitte helfen?

Antwort

0

Nun, Sie müssen die Position angeben, an der das Kind hinzugefügt werden soll. See here

@Override 
public Object instantiateItem(ViewGroup collection, int position) { 

    ..... 


    collection.addView(layout, 0); 
    return layout; 
}