有关ViewPager使用及解决ViewPager的item需要展示多个控件

来源:互联网 发布:股市数据下载 编辑:程序博客网 时间:2024/06/06 10:02

参考:http://blog.csdn.net/loongggdroid/article/details/19970523

ViewPager的使用类似于ListView,需要有对应的Adapter进行数据绑定,实现图片切换仅需要继承PaperAdapter就可以了。继承后需要重写如下四个方法。
instantiateItem(ViewGroup, int)
destroyItem(ViewGroup, int, Object)
getCount()
isViewFromObject(View, Object)

类似于BaseAdapter,其中instantiateItem方法用来得到每个View,destroyItem用以控制当某个View不需要的时候的回收处理。isViewFromObject用来实现判断View和Object是否为同一个View。

第一步:首先是在布局文件里添加viewPager布局。代码如下:

<?xml version="1.0" encoding="utf-8"?>      <RelativeLayout            android:layout_width="match_parent"            android:layout_height="0dp"            android:layout_weight="11"            android:background="@color/black" >            <com.xinanseefang.ui.view.ImageViewPager                android:id="@+id/vp_photoesalbum"                android:layout_width="wrap_content"                android:layout_height="wrap_content" />        </RelativeLayout>

第二步:创建item布局用于填充在ViewPager里,可以自定义也可以加载写好的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">    <ImageView        android:id="@+id/iv_log"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:background="@drawable/noimg240x160"        android:layout_centerVertical="true" />    <ImageView        android:id="@+id/iv_360"        android:layout_width="50dp"        android:layout_height="50dp"        android:layout_marginBottom="@dimen/public_margin15"        android:src="@drawable/icon_360_big"        android:layout_centerInParent="true"        android:visibility="gone"/></RelativeLayout>

第三步:然后就是Activity了,在Activity把布局放一个集合中传给PagerAdapter。代码如下:

  //********* 在这里写item布局放在集合中传给pagerAdapte **********listViews = new ArrayList<View>();for ( int i = 0; i < getData().getHousephoto().size(); i++) {View view = LayoutInflater.from(getApplicationContext()).inflate(R.layout.adapter_house_theme_photo, null);ImageView item_iv_log = (ImageView) view.findViewById(R.id.iv_log);ImageView item_iv_360 = (ImageView) view.findViewById(R.id.iv_360);//判断图片是否是3d  if(getData().getHousephoto().get(i).getIs3d() != null && getData().getHousephoto().get(i).getIs3d().equals("Yes")){    item_iv_360.setVisibility(View.VISIBLE);}else {    item_iv_360.setVisibility(View.GONE);}             item_iv_log.setImageResource(R.drawable.noimg720x300);String url = getData().getHousephoto().get(i).getUrl();if(!MyApplication.getShowPicture()){          Glide.with(context)               .load(url )               .priority(Priority.HIGH)               .placeholder(R.drawable.noimg720x300)               .error(R.drawable.noimg720x300)               .into(item_iv_log);}final int finalI = i;item_iv_log.setOnClickListener(new OnClickListener() {      @Override      public void onClick(View v) {           Intent intent = new Intent(context,  R.class);           intent.putExtra("city", mCity);           intent.putExtra("houseid", houseid);           intent.putExtra("photoid", getData().                getHousephoto().get(finalI).getPhotoid());            startActivity(intent);       }  });     listViews.add(view);}PhotoPagerAdapter photoPagerAdapter = new PhotoPagerAdapter(listViews);imageViewPager.setAdapter(photoPagerAdapter); photoPagerAdapter.notifyDataSetChanged();

第四步:是有关ViewPager的适配器的重写。代码如下:

package net.loonggg.viewpager;  import java.util.List;  import android.support.v4.view.PagerAdapter;  import android.view.View;  import android.view.ViewGroup;  public class ViewPagerAdapter extends PagerAdapter {      private List<View> list;      public ViewPagerAdapter(List<View> list) {          this.list = list;      }      @Override      public int getCount() {          if (list != null && list.size() > 0) {              return list.size();          } else {              return 0;          }      }      @Override      public boolean isViewFromObject(View arg0, Object arg1) {          return arg0 == arg1;      }      @Override      public void destroyItem(ViewGroup container, int position, Object object) {          container.removeView((View) object);      }      @Override      public Object instantiateItem(ViewGroup container, int position) {          container.addView(list.get(position));          return list.get(position);      }      @Override      public int getItemPosition(Object object) {          return POSITION_NONE;      }  }  
阅读全文
0 0
原创粉丝点击