4

I have a problem actually with my app, my ViewPager and ViewPagerIndicator ( http://viewpagerindicator.com/) are not displaying anything and i don't see why. I checked everything multiple times (setting correctly the adapter, adding the view in instantiateItem, returning the good size in getCount(),...), tried a few things (changing the layout params in the xml, reworking the MyPagerAdapter class), even looking for a similar issue in Google and here but nothing worked/wans't my problem.

I also have a bog, don't know if that has a link, but the instantiateItem method in my PagerAdapter is only called 2 times, while getCount() is well returning 3.

I really don't know where that can come from, if anybody has an idea i'll take it with great pleasure :

OnCreate (Of the Activity containing the 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 class (The 3rd case was here for a more visible test, see if it wasn't my fillGeneral or fillEquipments methods that were messed up) :

private class MyPagerAdapter extends 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;
    }

}

And the activity 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>

What it gives me (The Activity ends here and as shown, the ViewPagerIndicator displays nothing) : https://i.stack.imgur.com/xhyYI.jpg (External link, can't post pictures sorry!)

Bhullnatik
  • 1,263
  • 17
  • 28
  • When you used Hierarchy View to examine your UI, what did you find? – CommonsWare Sep 20 '12 at 10:59
  • @CommonsWare It depends on what you want me to see... :d I find that globally my activity is well displayed including that TitlePageIndicator, but the ViewPager still shows nothing aswell as its children (and only 2 children, while instantiateItem is supposed to create 3 !). Anyway thanks for the help you're providing me. :) – Bhullnatik Sep 20 '12 at 15:32
  • 1
    Ok i was a tool for the TitleIndicator, default theme just provides it in white, so was "invisible" with the background. [Updated UI](http://i.imgur.com/bzf2Q.png) Edit : We can't see it from here, but the TitlePageIndicator shows well the 3 titles. – Bhullnatik Sep 20 '12 at 15:50

3 Answers3

3

Ok so there wasn't any problem in the end, just me doing mistakes.

As said, the ViewPagerIndicator was just white on white so i can't see it, fine now.

For the ViewPager, it was just at the very end of my ScrollView, meaning there was no "real" screen space available for it, so the android:layout_height="match_parent" was uneffective. That seems a common issue with ViewPager, i'll see what i can do to adapt that.

Thanks anyway for the help, i hope this post can be useful to someone !

Bhullnatik
  • 1,263
  • 17
  • 28
3

I was having the same problem, I couldn't see the tab indicator.So, the problem was I hadn't copied the style.xml file in my project from ViewPagerIndicator project. Hope this could help some one in future.

Jagdeep Singh
  • 1,200
  • 1
  • 16
  • 34
1

Faced with the same problem and came up with a solution for it. Maybe a little spike, but it works) First, in xml file set

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

After create custom listener for check fragment size inside ViewPager

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

Implement it to your fragment

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

And implement method onChange where you can set layout height

@Override
public void onChange(int height) {
    RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) pager.getLayoutParams();
    params.height = height;
    pager.setLayoutParams(params);
}

Inside your child Fragment you can get layout_height

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

when you fill view, get layout height

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

Hope, this help. Please correct me if you find a better solution.

Vlad Hudnitsky
  • 1,345
  • 2
  • 11
  • 11