2015-09-01 6 views
11

Gezinme çubuğunu uygulamak için ViewPager ve PagerTabStrip'i kullanmayı öğreniyorum. Uyguladım, benim sorunum: uygulamayı her açtığımda, başlıklar gösterilmiyor, ancak bir kez kaydırdıktan sonra başlıklar tekrar beliriyor ve her şey normal. kod aşağıda gösterilen:ViewPager Başlık kaydırılıncaya kadar görüntülenmiyor

Özelleştirilmiş Adaptörü

public class MyPagerAdapter extends PagerAdapter { 
    private List<View> viewList; 
    private List<String> titleList; 

    public MyPagerAdapter(List<View> viewList, List<String> titleList){ 
     this.viewList = viewList; 
     this.titleList = titleList; 
    } 

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

    @Override 
    public boolean isViewFromObject(View view, Object o) { 
     return view == o; 
    } 

    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 
     container.addView(viewList.get(position)); 
     return viewList.get(position); 
    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
     container.removeView(viewList.get(position)); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return titleList.get(position); 
    } 
} 

.xml dosyası: enter image description here

Ve bu: Bu "Sadece uygulama simgesi tıklandığında" ekran görüntüsüdür

<android.support.v4.view.ViewPager 
    android:id="@+id/viewPager" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center"> 

    <android.support.v4.view.PagerTabStrip 
     android:id="@+id/tab" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom" 
     /> 

</android.support.v4.view.ViewPager> 

ikinci sayfaya kaydırıldıktan sonra: enter image description here

Gerçekten sinirlendim. Teşekkürler!!

+0

aşağıdaki kodu kullanabilirsiniz değiştirmek için senin viewpager, dışarıda yerleştirmeyi deneyin, bu arada. görünümleri yapıcınızdaki parametreler olarak geçiriyorsunuz; Bu bellek için iyi değil. Parçaları kullanmayı deneyin, burada nasıl yapılacağını gösteren bir örnek http://developer.android.com/reference/android/support/v4/app/FragmentStatePagerAdapter.html – Raykud

+0

Nope, sorunu çözmedi, ayrıca ben inanıyorum onu ViewPager içine koymak gerekiyordu. – TPWang

+0

onPageSelected işlevi üzerinde başlık mı ayarlıyorsunuz? –

cevap

12

Bu, com.android.support:appcompat-v7:23.0.0'da göründüğü bir sorundur. Buradan ulaşabilirsiniz https://code.google.com/p/android/issues/detail?id=183127

Bu bağlantıda google destek ekibi, kusurun gelecekteki sürümlerde düzeltileceğini belirtti. Yani şimdi çözüm com.android.support:appcompat-v7:22.2.1

Güncellemesi kullanarak projeyi inşa geçerli: o zaman @nidheeshdas tarafından sağlanan başka bir çözüm ile devam edebilir için ise mümkün. Basit bir proje üzerinde çalıştım; o Faaliyet onResume içindeki @nidheeshdas ait Modifiye çözümü()

viewPager.setCurrentItem(1); 
    viewPager.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      viewPager.setCurrentItem(0); 
     } 
    },100); 

Yeni Güncelleme çalışır: JP Ventura Yukarıdaki google sorun izleyici bağlantı ve yorumlarda bahsedildiği gibi. Kütüphanenin yeni sürümü ile denedim ve sorun giderilmiş gibi görünüyor.

+1

Bağımlılık "com.android.support:appcompat-v7:23.1.1" ile güncelleştiriliyor ve "23.0.2" sürüm araçları oluşturuluyor. –

1

Ayrıca bu soruna kısa bir süre önce başladım ve biraz testten sonra Android'in en son destek paketi güncellemesinde bir hata buldum.

Sorun, com.android.support:appcompat-v7:23.0.0 adresinde görünmektedir.

Bağımlılığı tekrar com.android.support:appcompat-v7:22.2.1 (ikinci en son güncelleştirme) olarak değiştirmeyi deneyin ve bunun işe yarayıp yaramadığını öğrenin.

Maalesef, en son destek paketi güncelleştirmesiyle çalışması için herhangi bir çözüm bulamadım.

+0

Ben bir yanıt bile alamıyorum bağımlılık ekle menüsünü ve kitaplık bağımlılığını tıklayın, yanıt vermiyor. Önce Android Studio’yu kaldıracağım ve sonra yeniden yükleyeceğim. – TPWang

1

Bunu deneyin. Benim için çalışıyor gibi görünüyor.

@Override 
protected void onResume() { 
    super.onResume(); 
    pager.setCurrentItem(1); 
    Task.delay(500).continueWith(new Continuation<Void, Object>() { 
     @Override 
     public Object then(Task<Void> task) throws Exception { 
      pager.setCurrentItem(0); 
      return null; 
     } 
    }, Task.UI_THREAD_EXECUTOR); 
} 

onResume Bu başlık Sayfa ilk defa yükleyen görünmesini sağlar geri 0'a ardından 1'e çağrı cihazını kurmak ve. Bunun yerine android.support.v4.view.PagerTabStrip kullanmanın

2

, android.support.design.widget kullanın.ViewPager için sekmeleri görüntülemek için tabLayout. Google Tasarım Destek Kitaplığı'nda bulunur.

fazla bilgi için bu bağlantıya bakın http://android-developers.blogspot.in/2015/05/android-design-support-library.html

Sadece birkaç satır:

viewPager=(ViewPager)v.findViewById(R.id.viewPager); 

ViewPagerAdapter adapter=new ViewPagerAdapter(this.getChildFragmentManager(),doctor); 
adapter.setViewPagerFragmentListener(this); 
viewPager.setAdapter(adapter); 

tabLayout.setupWithViewPager(viewPager); //Sync Tabs with viewPager 
tabLayout.setTabsFromPagerAdapter(adapter); //Setup tabs titles 

Ve başlıkları içinizde sizin PagerTabStrip var ViewPagerAdapter

@Override 
public CharSequence getPageTitle(int position) { 
    switch (position){ 
     case 0: 
      return "Title 1"; 
     case 1: 
      return "Title 2"; 
     case 2: 
      return "Title 3"; 
    } 
    return super.getPageTitle(position); 
}