4

我的應用程序實際上有問題,我的ViewPager和ViewPagerIndicator (http://viewpagerindicator.com/)沒有顯示任何內容,我不明白爲什麼。我多次檢查了所有東西(正確設置適配器,在instantiateItem中添加視圖,在getCount()中返回好大小,...),嘗試了一些操作(更改xml中的佈局參數,重新編寫MyPagerAdapter類),甚至在谷歌和這裏尋找類似的問題,但沒有任何工作/沒有我的問題。ViewPager&ViewPagerIndicator不顯示任何內容

我也有沼澤,不知道是否有一個鏈接,但在我的PagerAdapter方法instantiateItem只調用2次,而getCount將()很好地返回3.

我真不」知道哪裏可以從何而來,如果任何人有一個想法,我會帶着它非常高興:

的OnCreate(含ViewPager & ViewPagerIndicator活動的):

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_infos_vehicle); 

    title = (TextView) findViewById(R.id.title); 

    ll = (LinearLayout) findViewById(R.id.mygallery); 

    filenames = new ArrayList<String>(); 

    [...] 

    MyPagerAdapter adapter = new MyPagerAdapter(getResources().getStringArray(R.array.infos_vehicle)); 

    ViewPager pager = (ViewPager) findViewById(R.id.pager); 
    pager.setAdapter(adapter); 

    TitlePageIndicator indicator = (TitlePageIndicator) findViewById(R.id.titles_pager); 
    indicator.setFooterIndicatorStyle(IndicatorStyle.Triangle); 
    indicator.setViewPager(pager); 

    [...] 
} 

MyPagerAdapter類(第三案件是在這裏的一個更明顯的測試,看看它是否是被搞砸不是我fillGeneral或fillEquipments方法):

私有類MyPagerAdapter擴展PagerAdapter {

private final String[] TITLES; 

public MyPagerAdapter(String[] titles) { 
    TITLES = titles; 
} 

    @Override 
    public int getCount() { 
     return (TITLES.length); 
    } 

    @Override 
    public Object instantiateItem(View collection, int position) { 
     LayoutInflater inflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View v = null; 

     switch (position) { 
     case (0): 
      v = inflater.inflate(R.layout.linear_layout, null); 
      fillGeneral((ViewGroup) v.findViewById(R.id.layout)); 
      break; 
     case (1): 
      v = inflater.inflate(R.layout.linear_layout, null); 
      fillEquipments((ViewGroup) v.findViewById(R.id.layout)); 
      break; 
     case (2): 
      v = new ImageView(getApplicationContext()); 
      ((ImageView) v).setImageDrawable(getApplicationContext().getResources().getDrawable(android.R.drawable.alert_dark_frame)); 
      break; 
     } 
     ((ViewPager) collection).addView(v); 
     return (v); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return (TITLES[position]); 
    } 

    @Override 
    public void destroyItem(View collection, int position, Object view) { 
     ((ViewPager) collection).removeView((View) view); 
    } 

    @Override 
    public boolean isViewFromObject(View arg0, Object arg1) { 
     return (arg0.equals(arg1)); 
    } 

    @Override 
    public Parcelable saveState() { 
     return null; 
    } 

}

而且活動的xml:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" > 

     <TextView 
      android:id="@+id/title" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentTop="true" 
      android:layout_centerHorizontal="true" 
      android:layout_marginTop="10dp" 
      android:text="@string/hello_world" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:textColor="@color/first_color" /> 

     <Button 
      android:id="@+id/try_vehicle" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/title" 
      android:layout_centerHorizontal="true" 
      android:layout_marginTop="40dp" 
      android:onClick="tryingAlert" 
      android:text="@string/try_vehicle" /> 

     <Button 
      android:id="@+id/ask_informations" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/try_vehicle" 
      android:layout_centerHorizontal="true" 
      android:layout_marginTop="20dp" 
      android:onClick="informationsAlert" 
      android:text="@string/ask_informations" /> 

     <Button 
      android:id="@+id/remove_selection" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:onClick="removeFromSelection" 
      android:layout_below="@+id/ask_informations" 
      android:layout_centerHorizontal="true" 
      android:layout_marginTop="20dp" 
      android:text="@string/remove_selection" /> 

     <HorizontalScrollView 
      android:id="@+id/scroll" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_below="@+id/remove_selection" 
      android:layout_marginTop="18dp" 
      android:scrollbars="none" > 

      <LinearLayout 
       android:id="@+id/mygallery" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:orientation="horizontal" > 
      </LinearLayout> 

     </HorizontalScrollView> 

     <com.viewpagerindicator.TitlePageIndicator 
      android:id="@+id/titles_pager" 
      android:layout_below="@id/scroll" 
      android:layout_height="wrap_content" 
      android:layout_width="fill_parent" /> 

     <android.support.v4.view.ViewPager 
      android:id="@+id/pager" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_below="@id/titles_pager" /> 

    </RelativeLayout> 
</ScrollView> 

它給了我什麼(活動在這裏結束,如圖所示,ViewPagerIndicator什麼都不顯示): http://i.imgur.com/vRa1O.jpg(外部鏈接,不能發佈圖片抱歉!)

+0

當你使用Hierarchy View來檢查你的UI時,你發現了什麼? – CommonsWare

+0

@CommonsWare這取決於你要我看......什麼:就全球我的活動是很好的展示d我覺得包括TitlePageIndicator,但ViewPager仍顯示沒有藏漢作爲其子(只有2個孩子,而instantiateItem應該創建3!)。無論如何感謝您爲我提供的幫助。 :) – Bhullnatik

+1

好吧,我是TitleIndicator的工具,默認主題只是提供白色,所以背景是「隱形」的。 [更新UI](http://i.imgur.com/bzf2Q.png)編輯:我們無法從這裏看到,但TitlePageIndicator很好地展示了3個標題。 – Bhullnatik

回答

3

好吧,所以最終沒有任何問題,只是我犯了錯誤。

如上所述,ViewPagerIndicator只是白色的白色,所以我現在看不出來了。

對於ViewPager,它只是在我的ScrollView的末尾,這意味着它沒有「真實」的可用屏幕空間,所以android:layout_height="match_parent"是無效的。這似乎是ViewPager常見的問題,我會看看我能做些什麼來適應這種情況。

無論如何要幫忙,我希望這篇文章能對別人有用!

1

面對同樣的問題,並提出瞭解決方案。 也許有點秒殺,但它的工作原理) 首先,在XML文件中設置

<android.support.v4.view.ViewPager 
    android:id="@+id/pager" 
    android:layout_width="match_parent" 
    android:layout_height="fill_parent" 
    android:layout_below="@+id/tabs"/> 

創建後定製偵聽檢查片段大小裏面ViewPager

public interface ViewPagerListener { 
    void onChange(int height); 
} 

實現它向你的片段

public class FriendProfileTabstFragment extends AbstractFragment implements ViewPagerListener 
.... 
pager = (ViewPager) fragmentView.findViewById(R.id.pager); 
adapter = new TabsPagerAdapter(getChildFragmentManager(),user,this); 

並實現方法onChange您可以設置佈局高度

你的孩子片段
@Override 
public void onChange(int height) { 
    RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) pager.getLayoutParams(); 
    params.height = height; 
    pager.setLayoutParams(params); 
} 

在裏面你可以得到layout_height

View fragmentView = inflater.inflate(R.layout.tab_without_list_fragment, null); 
userRecordsList = (LinearLayout) fragmentView.findViewById(R.id.user_records_list); 

時填寫視圖,讓佈局高度

userRecordsList.measure(userRecordsList.getWidth(),userRecordsList.getHeight()); 
int height = userRecordsList.getMeasuredHeight(); 
listener.onChange(height); 

希望,這種幫助。如果你找到更好的解決方案,請糾正我。

3

我有同樣的問題,我看不到標籤指標。所以,問題是我沒有複製style.xml文件在我的項目從ViewPagerIndicator項目。希望這將有助於未來的某個人。