当封装好了OKhttpSDK网络请求组件的时候,就需要在应用层进行调用来更新View,先在应用层写一个调用接口,随后直接调用实现功能逻辑即可。
/**
* @function 应用层的封装,存放所有的请求接口
* @author chao
*/
public class RequestCenter {
//没有任何的业务逻辑,只是为了方便调用
public static void PostRequest (String url, RequestParams params, DisposeDataListener listener, Class<?>clazz){
CommonOkhttpClient.get(CommonRequest.CreateGetRequest(url, params),new DisposeDataHandle(listener, clazz));
}
//首页网络请求的接口
public static void RequestRecommanData (DisposeDataListener listener){
RequestCenter.PostRequest(HttpConstants.HOME_RECOMMAND,null,listener,BaseRecommandModel.class);
}
}
1:在Fragment文件中实现调用OKhttp接口,进行相关界面的渲染功能。
/**
* 发送首页列表数据请求
*/
private void requestRecommandData() {
RequestCenter.RequestRecommanData(new DisposeDataListener() {
@Override
public void onSuccess(Object responseObj) {
//完成更能逻辑,获取数据,更新View 获取数据
mRecommandData = (BaseRecommandModel) responseObj;
//更新UI
showSuccessView();
}
@Override
public void onFailure(Object reasonObj) {
//数据加载失败
showErrorView();
}
/**
* 请求成功调用
*/
private void showSuccessView() {
//判断数据为空&&大小大于0
if (mRecommandData.data.list != null && mRecommandData.data.list.size()>0) {
//更新UI
loading_view.setVisibility(View.GONE);
list_view.setVisibility(View.VISIBLE);
//新建adapter适配器
mAdapter = new CourseAdapter(mContext,mRecommandData.data.list);
list_view.setAdapter(mAdapter);
} else {
//请求失败
showErrorView();
}
}
/**
* 请求失败调用
*/
private void showErrorView() {
}
});
}
2:接下开根据判断结果,失败返回失败原因,成功执行更新UI; 新建一个CourseAdapter适配器,在里面实现更新的相关逻辑。(具体步骤就不一一写了,代码中有详细的注释)
/**
* @author chao
* @function listView中各种不同item的适配器
*/
public class CourseAdapter extends BaseAdapter {
/**
* listview中不同的item标识
*/
private static final int card_count = 4;
private static final int video_type = 0x01;
private static final int cade_single_pic = 0x02;
private static final int cade_figure_pic = 0x03;
private static final int cade_pager_pic = 0x04;
private Context mContext;
private ViewHolder mViewHolder;
private LayoutInflater mInflate;
private ArrayList<RecommandBodyValue> mData;
private ImageLoaderManager mImagerLoader;
// 构造方法,接收对应的参数 初始化控件
public CourseAdapter(Activity Context, ArrayList<RecommandBodyValue> list) {
mContext = Context;
mData = list;
mInflate = LayoutInflater.from(mContext);
mImagerLoader = ImageLoaderManager.getInstance(mContext);
}
//返回列表item的总数
@Override
public int getCount() {
return mData.size();
}
//返回列表item的每一项的数据
@Override
public Object getItem(int position) {
return mData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
//返回listView中所有的item类型
@Override
public int getViewTypeCount() {
return card_count;
}
//返回每列数据所对应的item类型
@Override
public int getItemViewType(int position) {
RecommandBodyValue value = (RecommandBodyValue) getItem(position);
return value.type;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//获取数据的type类型
int type = getItemViewType(position);
//获取对应列表数据
final RecommandBodyValue value = (RecommandBodyValue) getItem(position);
//创建View 判断缓存view是否为空
if (convertView == null){
//新建View
switch (type){
case cade_single_pic :
mViewHolder = new ViewHolder();
convertView = mInflate.inflate(R.layout.item_single_layout,parent,false);
//初始化单图Viewholder中所有的控件
mViewHolder.mLogoView = (CircleImageView) convertView.findViewById(R.id.item_logo_view);
mViewHolder.mTitleView = (TextView) convertView.findViewById(R.id.item_title_view);
mViewHolder.mPriceView = (TextView) convertView.findViewById(R.id.item_price_view);
mViewHolder.mInfoView = (TextView) convertView.findViewById(R.id.item_info_view);
mViewHolder.mFooterView = (TextView) convertView.findViewById(R.id.item_footer_view);
mViewHolder.mFromView = (TextView) convertView.findViewById(R.id.item_from_view);
mViewHolder.mZanView = (TextView) convertView.findViewById(R.id.item_zan_view);
mViewHolder.mProductLayout = (LinearLayout) convertView.findViewById(R.id.product_photo_view);
break;
case cade_figure_pic :
mViewHolder = new ViewHolder();
convertView = mInflate.inflate(R.layout.item_figure_layout,parent,false);
//初始化多图Viewholder中所有的控件
mViewHolder.mLogoView = (CircleImageView) convertView.findViewById(R.id.item_logo_view);
mViewHolder.mTitleView = (TextView) convertView.findViewById(R.id.item_title_view);
mViewHolder.mPriceView = (TextView) convertView.findViewById(R.id.item_price_view);
mViewHolder.mInfoView = (TextView) convertView.findViewById(R.id.item_info_view);
mViewHolder.mFooterView = (TextView) convertView.findViewById(R.id.item_footer_view);
mViewHolder.mFromView = (TextView) convertView.findViewById(R.id.item_from_view);
mViewHolder.mZanView = (TextView) convertView.findViewById(R.id.item_zan_view);
mViewHolder.mProductLayout = (LinearLayout) convertView.findViewById(R.id.product_photo_layout);
break;
case cade_pager_pic :
mViewHolder = new ViewHolder();
convertView = mInflate.inflate(R.layout.item_pager_layout, null, false);
//初始化Viewpager中所有的控件
mViewHolder.mViewPager = convertView.findViewById(R.id.pager);
mViewHolder.mViewPager.setPageMargin(utils.dip2px(mContext, 12));
//为ViewPager填充数据
ArrayList<RecommandBodyValue> recommandList = com.yongninggo.newapp.OKhttp.Util.handleData(value);
mViewHolder.mViewPager.setAdapter(new HotSalePagerAdapter(mContext, recommandList));
mViewHolder.mViewPager.setCurrentItem(recommandList.size() * 100);
break;
default:
break;
}
convertView.setTag(mViewHolder);
} else {
//表示有可用的ConvertView
mViewHolder = (ViewHolder) convertView.getTag();
}
//开始绑定数据
switch (type){
case cade_single_pic :
mViewHolder.mTitleView.setText(value.title);
mViewHolder.mPriceView.setText(value.price);
mViewHolder.mInfoView.setText(value.info.concat(mContext.getString(R.string.tianqian)));
mViewHolder.mFooterView.setText(value.text);
mViewHolder.mFromView.setText(value.from);
mViewHolder.mZanView.setText(mContext.getString(R.string.dian_zan).concat(value.zan));
//为imageView实现异步图片加载功能
mImagerLoader.display(mViewHolder.mLogoView,value.logo);
mImagerLoader.display(mViewHolder.mProductView,value.url.get(0));
break;
case cade_figure_pic :
mViewHolder.mTitleView.setText(value.title);
mViewHolder.mPriceView.setText(value.price);
mViewHolder.mInfoView.setText(value.info.concat(mContext.getString(R.string.tianqian)));
mViewHolder.mFooterView.setText(value.text);
mViewHolder.mFromView.setText(value.from);
mViewHolder.mZanView.setText(mContext.getString(R.string.dian_zan).concat(value.zan));
mImagerLoader.display(mViewHolder.mLogoView,value.logo);
mViewHolder.mProductLayout.removeAllViews();//删除已有的图片
//动态的添加imageview到ScrollView中
for (String url : value.url) {
mViewHolder.mProductLayout.addView(createImageView(url));
}
break;
case cade_pager_pic :
break;
default:
break;
}
return convertView;
}
/**
* 动态的创建imageView
* @return
*/
private ImageView createImageView (String url){
ImageView imageView = new ImageView(mContext);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(utils.dip2px(mContext,100),LinearLayout.LayoutParams.MATCH_PARENT);
params.leftMargin = utils.dip2px(mContext,5);
imageView.setLayoutParams(params);
mImagerLoader.display(imageView,url);
return imageView;
}
/**
* 缓存已经创建好的item
*/
private static class ViewHolder {
//所有Card共有属性
private CircleImageView mLogoView;
private TextView mTitleView;
private TextView mInfoView;
private TextView mFooterView;
//Video Card特有属性
private RelativeLayout mVieoContentLayout;
private ImageView mShareView;
//Video Card外所有Card具有属性
private TextView mPriceView;
private TextView mFromView;
private TextView mZanView;
//Card One特有属性
private LinearLayout mProductLayout;
//Card Two特有属性
private ImageView mProductView;
//Card Three特有属性
private View mViewPager;
}
}
还有一个就是头部添加图片轮播功能,可以自己制作,也可以依赖一个图片轮播的框架来进行开发。
只需要在请求成功的地方添加listView。
mListView.addHeaderView(new “类名”(mContext, mRecommandData.data.head));
大概的思路就是这样,基本就可以实现利用网络框架进行界面渲染了。