Question

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) : http://i.imgur.com/vRa1O.jpg (External link, can't post pictures sorry!)

Was it helpful?

Solution

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 !

OTHER TIPS

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.

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top