您的位置:首页 > 其它

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

2016-10-20 17:11 267 查看

一.对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 getInner
4000
ItemViewType(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的左右滑动事件
}
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: