我的应用程序,ViewPager和ViewPagerIndicator实际上存在问题 (http://viewpagerindicator.com/)没有显示任何内容,我不明白为什么。我多次检查所有内容(正确设置适配器,在instantiateItem中添加视图,在getCount()中返回良好的大小,...),尝试了一些事情(更改xml中的布局参数,重新编写MyPagerAdapter类),甚至在谷歌和这里寻找类似的问题,但没有任何效果/不是我的问题。
我也有一个沼泽,不知道是否有链接,但我的PagerAdapter中的instantiateItem方法只调用2次,而getCount()返回3。
我真的不知道可以从哪里来,如果有人有想法我会非常高兴地接受它:
OnCreate(包含ViewPager& ViewPagerIndicator的Activity中):
@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类(第3个案例是为了更加明显的测试,看看它是不是我的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 :(得分:3)
好的,所以最后没有任何问题,只是我犯了错误。
如上所述,ViewPagerIndicator白色只是白色所以我看不到它,现在很好。
对于ViewPager,它只是在我的ScrollView的最后,这意味着没有可用的“真实”屏幕空间,因此android:layout_height="match_parent"
无效。这似乎是ViewPager的一个常见问题,我会看到我能做些什么来适应它。
非常感谢你的帮助,我希望这篇文章对某人有用!
答案 1 :(得分:3)
我遇到了同样的问题,我无法看到标签指示符。所以问题是我没有从style.xml
项目复制项目中的ViewPagerIndicator
文件。希望这可以帮助将来的某些人。
答案 2 :(得分: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);
希望,这有帮助。如果你找到更好的解决方案,请纠正我。