【问题标题】:Image slider using View Pager issue使用 View Pager 问题的图像滑块
【发布时间】:2015-10-07 16:43:16
【问题描述】:

我有一个包含 listView 的活动。 listView 的每个项目都包含一组可滑动的图像(我曾尝试使用 ViewPager 来实现但未成功)。

我的问题是:当我尝试使用视图分页器实现一个简单的图像滑块时(即 Activity 包含一个 ViewPager,并且视图分页器的适配器提供图像),输出符合预期,但是如果我尝试做什么我在上一段中提到过(即 Activity 包含一个 listView 并且 listView 的每个项目都是一个 ViewPager ,它显示一组可滑动的图像),我得到一个空白输出。请帮帮我!我在下面发布了一些代码:

MainActivity.java

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ListView list = (ListView) findViewById(R.id.stylistDisplay);

    //To keep things simple I am sending only one item of the list to the adapter

    list.setAdapter(new StylistAdapter(Cart.getList().get(0), this));
}

static class StylistAdapter extends BaseAdapter {
    Stylist stylistObj;
    Context context;
    LayoutInflater inflater;

    public StylistAdapter(Stylist obj, Context context) {
        this.stylistObj = obj;
        this.context = context;
        inflater = ((Activity)this.context).getLayoutInflater();
    }

    @Override
    public int getCount() {
        return 1;
    }

    @Override
    public Object getItem(int position) {
        return stylistObj;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final ViewItem item;

        if (convertView == null) {
            convertView = inflater.inflate(R.layout.stylist_photos_view_pager, null);
            item = new ViewItem();
            item.photosViewPager = (ViewPager) convertView.findViewById(R.id.photos_view_pager);
            convertView.setTag(item);
        } else {
            item = (ViewItem) convertView.getTag();
        }
        PhotosAdapter adapter = new PhotosAdapter(context);
        item.photosViewPager.setAdapter(adapter);

        return convertView;
    }

    private class ViewItem {
        ViewPager photosViewPager;
    }
}

activity_main.xml

  <FrameLayout   xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.temp.customer.MainActivity">

<ListView
    android:id="@+id/stylistDisplay"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:divider="@android:color/transparent"
    android:background="@color/backGround"
    android:padding="13.3dp"
    android:clickable="true"
    android:dividerHeight="5dp" />
</FrameLayout>

stylist_photos_view_pager

 <RelativeLayout xmlns:android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   tools:context=".MainActivity" >

  <android.support.v4.view.ViewPager
    android:id="@+id/photos_view_pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

</RelativeLayout>

PhotosAdapter.java

public class PhotosAdapter extends PagerAdapter {
private Context context;
private int[] GalImages = new int[] {
        R.drawable.one,
        R.drawable.two,
        R.drawable.three
};
public PhotosAdapter(Context context) {
    this.context = context;
}

@Override
public Object instantiateItem(ViewGroup container, int position) {
    LayoutInflater inflater = ((Activity)context).getLayoutInflater();
    View viewItem = inflater.inflate(R.layout.stylist_individual_details, container, false);
    ImageView imageView = (ImageView) viewItem.findViewById(R.id.iv1);
    imageView.setImageResource(GalImages[position]);
    TextView textView1 = (TextView) viewItem.findViewById(R.id.tv1);
    textView1.setText("hello world");
    ((ViewPager)container).addView(viewItem);

    return viewItem;
}

@Override
public int getCount() {
    return 3;
}

@Override
public boolean isViewFromObject(View view, Object object) {
    boolean temp = view == ((LinearLayout) object);
    return temp;
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    ((ViewPager) container).removeView((LinearLayout) object);
}

}

【问题讨论】:

    标签: android android-viewpager


    【解决方案1】:

    我遇到过类似的问题,不得不说将 ViewPager 用作 listItem 是个坏主意,因为 ViewPager 应该主要用于片段。

    我猜你的功能应该类似于一些水平图片,在垂直的主提要上。您可以考虑使用水平滚动视图,这有点痛苦,但这样做更现实。您还可能最终管理自己的滚动行为,这可能已经由某些库实现。

    但我可能错了! 这个帖子有类似的问题:

    Placing ViewPager as a row in ListView

    【讨论】:

    • 您遇到问题时是如何解决的?
    【解决方案2】:

    阅读了一段时间后,我尝试明确设置 viewPager 及其父级的高度。这对我有用。

    <?xml version="1.0" encoding="utf-8"?>
      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="200dip"
        android:orientation="vertical" >
    
       <android.support.v4.view.ViewPager
          android:id="@+id/pager"
          android:layout_width="match_parent"
          android:layout_height="200dip" >
       </android.support.v4.view.ViewPager>
     </LinearLayout>
    

    我不知道是否有更好的解决方案,但如果您有更好的解决方案,请发表评论!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-04
      • 1970-01-01
      • 1970-01-01
      • 2014-11-01
      • 2018-02-11
      • 1970-01-01
      • 2016-10-14
      • 1970-01-01
      相关资源
      最近更新 更多