谷歌电子市场第三天知识点总结

一.对BaseAdapter进行面向Holder编程

1  抽取Adapter 共性的方法
2  把getView方法里 和holder相关的逻辑 摘取到Holder代码中
3  把Holder 相关的代码 抽取到BaseHolder中 
4  把adapter 中getVIew 方法 抽取到了DefaultAdpater中, 其中每个子类getView方法中holder不太一样,所以定义了抽象方法getHolder 要求子类去实现holder

抽取BaseHolder

public abstract class BaseHolder<Data>  {
		private View contentView;
		private Data data;
		protected BitmapUtils bitmapUtils;
		public BaseHolder(){
			bitmapUtils = BitmapHelper.getBitmapUtils();
			contentView=initView();
			contentView.setTag(this);
		}
		/** 创建界面*/
		public  abstract View initView();
		public View getContentView() {
			return contentView;
		}
		public void setData(Data data){
			this.data=data;
			refreshView(data);
		}
		/** 根据数据刷新界面*/
		public abstract void refreshView(Data data);
	}
二.解析Json

1.创建javabean

public class Categoryinfo {
	private String title;
	private String url1;
	private String url2;
	private String url3;
	private String name1;
	private String name2;
	private String name3;
	private  boolean  isTitle;// 是否是标题
	
	public Categoryinfo(String title, String url1, String url2, String url3,
			String name1, String name2, String name3,boolean isTitle) {
		super();
		this.title = title;
		this.url1 = url1;
		this.url2 = url2;
		this.url3 = url3;
		this.name1 = name1;
		this.name2 = name2;
		this.name3 = name3;
		this.isTitle=isTitle;
	}
	

	public Categoryinfo() {
		super();
	}


	public boolean isTitle() {
		return isTitle;
	}
	public void setIsTitle(boolean isTitle) {
		this.isTitle = isTitle;
	}
	
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getUrl1() {
		return url1;
	}
	public void setUrl1(String url1) {
		this.url1 = url1;
	}
	public String getUrl2() {
		return url2;
	}
	public void setUrl2(String url2) {
		this.url2 = url2;
	}
	public String getUrl3() {
		return url3;
	}
	public void setUrl3(String url3) {
		this.url3 = url3;
	}
	public String getName1() {
		return name1;
	}
	public void setName1(String name1) {
		this.name1 = name1;
	}
	public String getName2() {
		return name2;
	}
	public void setName2(String name2) {
		this.name2 = name2;
	}
	public String getName3() {
		return name3;
	}
	public void setName3(String name3) {
		this.name3 = name3;
	}
}
2.使用json进行解析

public class CategoryProtocol extends BaseProtocol<List<Categoryinfo>>{

	@Override
	public List<Categoryinfo> parseJson(String json) {
		List<Categoryinfo>categoryinfos = new ArrayList<Categoryinfo>();
		try {
			JSONArray array = new JSONArray(json);
			for (int i = 0; i < array.length(); i++) {
				JSONObject jsonObject = array.getJSONObject(i);
				String title = jsonObject.getString("title");

				Categoryinfo categoryInfo=new Categoryinfo();
				categoryInfo.setTitle(title);//标题
				categoryInfo.setIsTitle(true);//是否有标题
				categoryinfos.add(categoryInfo);
				
				JSONArray jsonArray = jsonObject.getJSONArray("infos");
				for (int j = 0; j < jsonArray.length(); j++) {
					JSONObject jsonObject2 = jsonArray.getJSONObject(i);
					String url1=jsonObject2.getString("url1");
					String url2=jsonObject2.getString("url2");
					String url3=jsonObject2.getString("url3");
					String name1=jsonObject2.getString("name1");
					String name2=jsonObject2.getString("name2");
					String name3=jsonObject2.getString("name3");
					Categoryinfo categoryinfo2 = new Categoryinfo(title, url1, url2, url3, name1, name2, name3,false);
					categoryinfos.add(categoryinfo2);
				}
			}
			return categoryinfos;
		} catch (JSONException e) {
			e.printStackTrace();
			return null;
		}
		
	}

	@Override
	public String getKey() {
		return "category";
	}

	@Override
	public String getParams() {
		return "";
	}

}

三.ListVIew多类型的复用

/** 根据位置 判断当前条目是什么类型 */

		/** 当前ListView 有几种不同的条目类型 */
		@Override
		public int getViewTypeCount() {
			return super.getViewTypeCount() + 1; // 2 有两种不同的类型
		}
		@Override
		public int getItemViewType(int position) {  //20     
			if (position == datas.size()) { // 当前是最后一个条目
				return MORE_ITEM;
			}
			return getInnerItemViewType(position); // 如果不是最后一个条目 返回默认类型
		}
	
		private int getInnerItemViewType(int position) {
			return DEFAULT_ITEM;
		}

.ViewPager自动轮询

1.定时器发送消息轮询

viewPager.setCurrentItem(data.size() * 5000000);// 设置在中间
		handler = new Handler() {
			public void handleMessage(android.os.Message msg) {
				int currentItem = viewPager.getCurrentItem();
				if (currentItem < data.size() * 10000000) {
					currentItem++;
				} else {
					currentItem = 5000000 * data.size();//回到中间
				}
				viewPager.setCurrentItem(currentItem);
				//handler.sendEmptyMessageDelayed(0, 2000);
			}
		};
		//每隔两秒钟发送一次消息
		Timer timer = new Timer();
		timer.schedule(new TimerTask() {
			
			@Override
			public void run() {
				handler.sendEmptyMessage(0);
			}
		}, 2000, 2000);

2.触摸取消轮询

	viewPager.setOnTouchListener(new OnTouchListener() {
			@Override
			public boolean onTouch(View v,MotionEvent event) {
				switch (event.getAction()) {
				case MotionEvent.ACTION_DOWN:
					handler.removeCallbacksAndMessages(null);//移除handler的发送消息
					break;
				case MotionEvent.ACTION_UP:
					handler.sendEmptyMessageDelayed(0, 2000);
					break;
				case MotionEvent.ACTION_CANCEL:
					handler.sendEmptyMessageDelayed(0, 2000);
					break;
				default:
					break;
				}
				return false;//不拦截Viewpager的左右滑动事件
			}
		});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值