所以,我处于一种情况,我想在一个片段中添加一个ViewPager视图(不是片段)作为gridview的标题,但是当我将它设置为我的标题视图时,我的ViewPager不会出现。我目前正在使用Etsy的StaggeredGridView来允许我的gridview有一个标题,我使用PagerAdapter而不是FragmentStatePagerAdapter来滚动视图而不是片段。我打算只使用片段,但我不确定这是否会好,因为我认为,这将被认为是嵌套片段,只支持4.2+并通过支持库:我的应用程序支持4.0以上,此刻,我正在使用原生片段。
我也尝试以编程方式设置视图,但仍然没有显示。
我在ViewPager中设置了一个toast来查看是否实际创建了任何内容,并且toast按预期显示,但仍然没有标题。我试图膨胀的观点不应该是问题,因为如果我将它作为标题单独使用它就会显示出来。这是我到目前为止所做的:
@Override
public View onCreateView(final LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//inflate fragment which contains the gridview. Have a pointer to the gridview.
View v = inflater.inflate(R.layout.fragment_menu, container, false);
mGridView = (StaggeredGridView) v.findViewById(R.id.dishesGridView);
View header = inflater.inflate(R.layout.view_pager_header, container, false);
ViewPager mPager = (ViewPager) header.findViewById(R.id.pager);
//list of views to test header
final List<View> views = new ArrayList<View>();
views.add(inflater.inflate(R.layout.menu_header, null));
mPager.setAdapter(new PagerAdapter() {
public View getView(int position) {
return views.get(position);
}
@Override
public Object instantiateItem(ViewGroup collection, int position) {
View v = getView(position);
((ViewPager)collection).addView(v);
Toast.makeText(getActivity(),
"Hello ViewPager",
Toast.LENGTH_SHORT).show();
return v;
}
@Override
public void destroyItem(ViewGroup collection, int position, Object view) {
((ViewPager) collection).removeView((View) view);
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return arg0 == (View) arg1;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return views.size();
}
});
mGridView.addHeaderView(mPager);
return v;
}
这是view_pager_header.xml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.view.ViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
这是menu_header.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<FrameLayout
android:id="@+id/resHeader"
android:layout_width="wrap_content"
android:layout_height="100dp" >
<com.platey.IonPlatey.RectangleImageView
android:id="@+id/restaurant_icon"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop" />
<ImageView
android:src="@drawable/frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
<TextView
android:id="@+id/resType"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:paddingRight="15dp"
android:text="ResType Here"
android:textColor="#d82727"
android:textStyle="bold" />
</RelativeLayout>
答案 0 :(得分:5)
基本上问题是由ViewPager
android:layout_height="match_parent"
引起的。
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.view.ViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
match_parent
肯定是错误的,因为您不希望标题填满整个父级。但无论如何,match_parent
都无法在StaggeredGridView
中使用。
这与标准ListView
项目等相同。 - match_parent
是不允许的,在执行布局时,它只会被wrap_content
替换。
遗憾的是,wrap_content
不支持ViewPager
,因为ViewPager
无法包装其内容(它不知道子级大小)。
您有两种方法可以在那里正确显示ViewPager
:
50dp
)ViewPager
并执行自己的测量。以下是match_parent
的屏幕截图。您可以看到ViewPager也未显示(高度为零):
并且具有静态高度:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.view.ViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="50dp" />