我有问题。我正在尝试使用ListAdapter中的ViewPager和ListView内部制作幻灯片库。一切都很好,但只有当我将ViewPager高度设置为300dp(示例)时,但是当我使用match_parent或wrap_content时,它根本不显示内容。
我的适配器:
public class KlasztorListAdapter extends ArrayAdapter<KlasztorElement> {
private Activity context;
private List<KlasztorElement> klasztorElements;
static class ViewHolder
{
public ViewPager viewPager;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
ViewHolder viewHolder;
View rowView = convertView;
if(rowView == null)
{
LayoutInflater layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
rowView = layoutInflater.inflate(R.layout.row_klasztor, null, false);
viewHolder = new ViewHolder();
viewHolder.viewPager = (ViewPager) rowView.findViewById(R.id.view_pager);
viewHolder.viewPager.setId(position + getCount());
viewHolder.indicator = (UnderlinePageIndicator) rowView.findViewById(R.id.indicator);
rowView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) rowView.getTag();
}
final KlasztorElement klasztorElement = klasztorElements.get(position);
CustomPagerAdapter adapter = new CustomPagerAdapter(context, klasztorElement.getImages());
viewHolder.viewPager.setAdapter(adapter);
viewHolder.indicator.setViewPager(viewHolder.viewPager);
return rowView;
}
class CustomPagerAdapter extends PagerAdapter {
Context context;
ArrayList<ImageGroup> imageGroup;
public CustomPagerAdapter(Context context, ArrayList<ImageGroup> imageGroup) {
this.imageGroup = imageGroup;
this.context = context;
}
@Override
public int getCount() {
return imageGroup.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, final int position) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
View itemView = inflater.inflate(R.layout.pager_image_item, container, false);
ImageView imageView = (ImageView) itemView.findViewById(R.id.imageView);
imageView.setImageResource(imageGroup.get(position).getImage());
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ImageUtils.showImage((FragmentActivity)context, imageGroup.get(position).getImageFull());
}
});
container.addView(itemView);
return itemView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((LinearLayout) object);
}
}
}
我的幻灯片演示元素:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/inner_layout"
android:orientation="vertical"
android:layout_width="match_parent"
android:gravity="top"
android:layout_height="match_parent">
<ImageView
android:layout_gravity="top"
android:src="@mipmap/klasztor_2"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/imageView" />
</LinearLayout>
我的ElementRow布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:id="@+id/layout"
android:layout_height="wrap_content">
<com.viewpagerindicator.UnderlinePageIndicator
android:id="@+id/indicator"
android:layout_height="6dp"
android:layout_width="fill_parent">
</com.viewpagerindicator.UnderlinePageIndicator>
<android.support.v4.view.ViewPager
android:id="@+id/view_pager"
android:layout_gravity="top"
android:layout_width="fill_parent"
android:layout_height="match_parent" // it works when i use ex. ="220dp"
android:overScrollMode="never" >
</android.support.v4.view.ViewPager>
</LinearLayout>
请帮帮我,我不知道怎么做才行。具有硬编码高度的解决方案可行,但在某些设备上看起来不太好。
提前致谢
答案 0 :(得分:0)
不幸的是,Android中的ListView
不支持其子元素的match_parent
属性。除此之外,ViewPager
并不支持wrap_content
属性,因此使用这两个组件时,您仍然坚持使用固定高度。
如果您愿意加倍努力,来自支持库的RecyclerView
已为其子元素添加了对match_parent
的支持。这将需要对您的代码进行一些重组,并且根据您到达的程度,您可能会选择执行或不执行此操作。如果您有兴趣,可以在creating lists ands cards的Android开发者页面上找到快速教程。如果您需要进一步说明,请在评论中提问。