ViewPager & ViewPagerIndicator not displaying anything
-
03-07-2021 - |
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!)
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.