2012-06-12 12 views
5

ViewPagers'ın bir listesini uygulamak istiyorum. ListView'ın her öğesi ViewPager'dır. Bu şimdiye kadar çalışıyor. Benim sorunum, ViewPager'ın durumunu koruyamıyorum. Örneğin, listeden ilk ViewPager'ın sayfasını değiştirdiğimde, ilk ViewPager görünmeyene kadar aşağı kaydırın ve sonra tekrar yukarı kaydırın, ilk ViewPager ilk sayfasını tekrar gösterir.ListView'de ViewPager'ın durumu nasıl korunur?

ListView için bir tane ve ViewPager için bir tane olmak üzere iki tane bağdaştırıcı yazdım. ListAdapter'te getView yönteminin convertView parametresinden görünümü geri dönüştürmeye çalışıyorum. Doğru yapıp yapmadığımı ve ViewPagerAdapter'te nasıl yapılacağını bilmiyorum.

Herhangi bir fikrin var mı? MyListAdapter gelen

GetView: ViewPagerAdapter dan

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    if(convertView == null){ 
     LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     mRowView = inflater.inflate(R.layout.listitem, parent, false); 

    }else{ 
     mRowView=convertView; 
    } 
    switch(position){ 
    case 0://Fussball 
     ViewPagerAdapter fussballAdapter = new ViewPagerAdapter(mContext,"Fussball"); 
     ViewPager fussballPager = (ViewPager) mRowView.findViewById(R.id.viewpager1); 
     fussballPager.setAdapter(fussballAdapter); 
    break; 
    case 1://Handball 
    ViewPagerAdapter handballAdapter = new ViewPagerAdapter(mContext,"Handball"); 
     ViewPager handballPager = (ViewPager) mRowView.findViewById(R.id.viewpager1); 
     handballPager.setAdapter(handballAdapter); 
     break; 
    //.../ 
    default: 
     //Do nothing 
    } 
    return mRowView; 
} 

instantiateItem:

@Override 
public Object instantiateItem(View pager, int position) { 
    inflater = (LayoutInflater) context 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    switch(position){ 
    case 0: 
     oneLayout=inflater.inflate(R.layout.table_layout, null); 
     break; 
    case 1: 
     oneLayout=inflater.inflate(R.layout.table_layout_second, null); 
     break; 
    default: 
     oneLayout=inflater.inflate(R.layout.table_layout, null); 
     break; 
    } 
    ((ViewPager)pager).addView(oneLayout, 0); 
    return oneLayout; 
} 

Teşekkür

burada şimdiye kadar benim kodudur! :)

cevap

1

Bu sorunun nedeni olarak ListView Geri Dönüşümüne teşekkür edebilirsiniz. Geri dönüştürücünün satır öğelerinizi geri almasını ve yeniden kullanmasını sağlar.

Sorununuzu çözmeniz gereken tek kolay düzeltme etiketi kullanmaktır. RowView döndürmeden önce etiketi ayarlayın.

view.setTag(currentPagerPosition); 

Sonra eğer convertView! = Eğer

int pastPagerPosition = (int) view.getTag(); 
+0

Çağrı cihazı hareket ettiğinde geçerli konumu, örn., 1. sayfadan bir sonraki sayfaya mı ihtiyacınız var? –

+0

ViewPagerAdapter, bir getPosition() işlevine veya içinde bunun gibi bir şeye sahip olmalıdır. –

+0

Teşekkür ederim, Frank. Ben zaten benzer bir çözüm hakkında düşündüm, ama benim sorunum ViewPager konumunu MyListViewAdapter içinden almaktır. Bunu yapması gereken getCurrentItem() adında bir yöntem var, ancak her zaman "0" geri aldım. (Onu ViewView yönteminin içindeki ViewPager nesnesinde kullanıyorum) – kiberNet

4

Uygulama setOnPageChangeListener yapabilir ve Burada Güncel pozisyon alın

pager = (ViewPager) findViewById(R.id.pager); 
    pager.setAdapter(new ImagePagerAdapter(imageUrls)); 
    pager.setCurrentItem(position); 

    pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 

     public void onPageScrollStateChanged(int arg0) { 
      // TODO Auto-generated method stub 
      int i = 0; 
      int newpos = arg0; 

     } 


     public void onPageScrolled(int arg0, float arg1, int arg2) { 
      // TODO Auto-generated method stub 
      int i = 0; 
      int newpos = arg0; 

     } 

     public void onPageSelected(int arg0) { 
      // TODO Auto-generated method stub 
      int i = 0; 
      position = arg0; 
      //you can get Current position here    
     } 
    }); 

Umut onpageselected Can böylece konumunu ayarlamak gerekir biliyorum boş Bu yardımcı olur!

+0

ViewPager'ın şu anki konumu bu şekilde çalışıyor, teşekkürler Kalai! – kiberNet

+0

Lütfen cevap olarak onu işaretleyin kiberNet –

İlgili konular