ListView

时间:2016-06-04 15:50:55

标签: android listview android-viewpager

我有问题。我正在尝试使用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>

请帮帮我,我不知道怎么做才行。具有硬编码高度的解决方案可行,但在某些设备上看起来不太好。

提前致谢

1 个答案:

答案 0 :(得分:0)

不幸的是,Android中的ListView不支持其子元素的match_parent属性。除此之外,ViewPager并不支持wrap_content属性,因此使用这两个组件时,您仍然坚持使用固定高度。

如果您愿意加倍努力,来自支持库的RecyclerView已为其子元素添加了对match_parent的支持。这将需要对您的代码进行一些重组,并且根据您到达的程度,您可能会选择执行或不执行此操作。如果您有兴趣,可以在creating lists ands cards的Android开发者页面上找到快速教程。如果您需要进一步说明,请在评论中提问。