android适配器中view复用的示例代码

工作中用过的,总结一下

package com.iwhere.showsports.adapter;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.RelativeLayout;

import com.iwhere.libumengshare.AuthroizeToolV2;
import com.iwhere.nettool.BaseCallBack;
import com.iwhere.nettool.JsonTools;
import com.iwhere.showsports.R;
import com.iwhere.showsports.activity.PlayerZhiBoActivity;
import com.iwhere.showsports.bean.ZhiboMovie;
import com.iwhere.showsports.utils.Constants;
import com.iwhere.showsports.utils.Utils;
import com.letv.controller.PlayProxy;
import com.letv.universal.iplay.EventPlayProxy;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.assist.ImageSize;
import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;

import org.json.JSONArray;
import org.json.JSONObject;
import org.xutils.common.util.LogUtil;

import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;

public class HomeZhiboImgPagerAdapter extends PagerAdapter {
    private Activity mContext;
    LinkedList<RelativeLayout> mPaperViews = new LinkedList<RelativeLayout>();
    private Map<Integer, RelativeLayout> mImgsListViews = new HashMap<Integer, RelativeLayout>();
    private ArrayList<ZhiboMovie> mLocalPhotoList = new ArrayList<ZhiboMovie>();

    final int width;
    final int height;

    public HomeZhiboImgPagerAdapter(      Activity mContext    ) {
        super();
        this.mContext = mContext;
        this.mLocalPhotoList = new ArrayList<ZhiboMovie>();
//		width = (int) mContext.getResources().getDimension(R.dimen.w610dp)/ 2;
//		height = (int) mContext.getResources().getDimension(R.dimen.w457dp)/ 2;
        width = 305;
        height = 253;
    }


    @Override
    public int getCount() {
//        int size = mLocalPhotoList == null || mLocalPhotoList.size() == 0 ? 1 : mLocalPhotoList.size();
        int size = mLocalPhotoList == null ? 0 : mLocalPhotoList.size();
        return size;
    }

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        return arg0 == arg1;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        RelativeLayout view = (RelativeLayout) mImgsListViews.get(position);
        view.setBackgroundColor(Color.TRANSPARENT);
        if (view != null) {
            container.removeView(view);
            mImgsListViews.remove(position);
        }
        mPaperViews.push((RelativeLayout) view);
    }

    /**
     * 载入图片进去,用当前的position 除以 图片数组长度取余数是关键
     */
    @Override
    public Object instantiateItem(View container, final int position) {
        RelativeLayout rlImagePaper = null;
        if (!mPaperViews.isEmpty()) {
            rlImagePaper = mPaperViews.poll();
        }
        if (rlImagePaper == null || rlImagePaper.getParent() != null) {
            rlImagePaper = new RelativeLayout(mContext);
            rlImagePaper.setLayoutParams(new LayoutParams(width, height));
            LogUtil.e("新生成的" + rlImagePaper + "列表大小=" + mPaperViews.size());
        }
        RelativeLayout iv = initPaperMingXingImgView(position, rlImagePaper);
        mImgsListViews.put(position, iv);
        ((ViewPager) container).addView(iv, 0);
        return iv;
    }

    private RelativeLayout initPaperMingXingImgView(final int position, final RelativeLayout iv) {
        final String imageurl = mLocalPhotoList.get(position).getActivityPicUrlFormat();
        ImageLoader.getInstance().loadImage(imageurl, new ImageSize(width, height), new ImageLoadingListener() {

            @Override
            public void onLoadingComplete(String arg0, View arg1, Bitmap bitmap) {
                iv.setBackground(new BitmapDrawable(bitmap));
            }

            @Override
            public void onLoadingFailed(String arg0, View arg1, FailReason arg2) {
                iv.setBackgroundResource(R.mipmap.ic_log);
            }

            @Override
            public void onLoadingCancelled(String s, View view) {

            }

            @Override
            public void onLoadingStarted(String s, View view) {

            }
        });
        iv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String roomid = mLocalPhotoList.get(position).getRoomId();
                String activityId = mLocalPhotoList.get(position).getActivityId();
                toLookZhiBo(mLocalPhotoList.get(position).getPlayURL(),roomid,activityId);
            }
        });
        return iv;
    }


    public void getLiveList(){
        Map<String, String> map = new HashMap<String, String>();
        AuthroizeToolV2.getInstance().sendByGet(Constants.GET_ZHIBO_LIST,map,new BaseCallBack<String>(){
            @Override
            public void onSuccess(String result) {
                super.onSuccess(result);
                LogUtil.e("getLiveList==>"+result);
                JSONObject jobj = JsonTools.getJSONObject(result);
                String status = JsonTools.getString(jobj, "server_status");
                if ("200".equals(status)) {
                    JSONObject data = JsonTools.getJSONObject(jobj,"data");
                    JSONArray lives = JsonTools.getJSONArray(data, "lives");
                    ArrayList<ZhiboMovie> zhiboMovies = ZhiboMovie.fomatFromJson(lives);
                    mLocalPhotoList.clear();
                    if(zhiboMovies != null){
                        mLocalPhotoList.addAll(zhiboMovies);
                    }
                    notifyDataSetChanged();
                } else {
                    String server_error = JsonTools.getString(jobj, "server_error");
                    if (TextUtils.isEmpty(server_error)) {
                        Utils.showToast(mContext,server_error);
                    }
                }
            }

            @Override
            public void onError(Throwable ex, boolean isOnCallback) {
                super.onError(ex, isOnCallback);

            }
        });
    }



    // /
    private void toLookZhiBo(final String zhibourl,final String roomid,final String activityId){
        if(TextUtils.isEmpty(zhibourl)){
            Utils.showToast(mContext,"直播路径不能为空!");
            return;
        }
        LogUtil.e("将要直播的地址是===>"+zhibourl);
        LogUtil.e("将要直播的roomid是===>"+roomid);

        Intent toZhiBo = new Intent(mContext, PlayerZhiBoActivity.class);
        //乐视手机云直播
        Bundle mBundle = new Bundle();
        mBundle.putInt(PlayProxy.PLAY_MODE, EventPlayProxy.PLAYER_LIVE);
        mBundle.putString("path", zhibourl);
        mBundle.putString("roomid", roomid);
        mBundle.putString("activityId", activityId);
        toZhiBo.putExtra(PlayerZhiBoActivity.DATA, mBundle);
        mContext.startActivity(toZhiBo);
    }

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值