android 重新加载网络页面设置
这两天在优化程序的页面,重新加载网络的工作,感触颇多。在这里将自己学到的给大家分享一下:
我们获取网络数据时,如果突然断网,或者网络不好,不能获取完整的数据,那么我们就需要弹出重新加载的按钮,当用户点击时,如果网络网络状态良好,就应该重新加载页面。
上代码:`public class DiyView {
private View view = null;
private ViewGroup viewGroup = null;
private Context mContext;
private String TAG = "DiyView";
private AgainView againView;
private TextView tv_again;
public final static int TYPE_NULL = 0;
public final static int TYPE_Error = 1;
public DiyView(Context context, ViewGroup viewGroup) {
this.viewGroup = viewGroup;
this.mContext = context;
}
/**设置当前状态:TYPE_NULL---》请求成功,没有数据TYPE_Error---》请求失败,重新加载
*
* @param type
*/
public void setReturnView(int type){
switch (type){
case TYPE_NULL:
view = LayoutInflater.from(mContext).inflate(R.layout.lay_nulldata,viewGroup,false);
viewGroup.addView(view,0);
break;
case TYPE_Error:
if(viewGroup==null){
Log.d(TAG, "setReturnView: "+"Viewgroup"+"是空");
}
view = LayoutInflater.from(mContext).inflate(R.layout.lay_tryagain,viewGroup,false);
if(view==null){
Log.d(TAG, "setReturnView: "+"view是空" );
}
viewGroup.addView(view,0);
tv_again = (TextView) viewGroup.findViewById(R.id.tv_again);
break;
}
}
/**
* 请求失败是点击重新加载的外接接口
* @param tryAgain
*/
public void setTryAgain(final AgainView tryAgain){
tv_again.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG, "onClick: "+"点击了重新加载");
clearView();
tryAgain.try_Again();
}
});
}
/**
* 重新加载完成后,或者是正常加载时,清除之前添加的页面
*/
public void clearView(){
if(view!=null){
viewGroup.removeView(view);
}
//之前没有添加view,所以不操作
else{
}
}
}
`
使用的时候,在应的activity先实例化类,为什么不用单例模式呢?应为每个页面的ViewGroup都是不一样的。其中View是我们自定义的加载页面。在使用它的时候呢,把要作为父控件的控件放到实例化的类里面,如果获取数据失败,就调用diyView.setReturnView(DiyView.TYPE_Error);方法。
---2016-07-12
今天在使用过程中发现,该类使用onclick的话,必须点击两下才能相应点击事件。这是应为,在相应点击事件的时候,要先获取控件的焦点,然后才会响应点击。解决方法是,将点击事件换成触摸事件setOnTouchListener就可以啦。
在遇到ViewGroup是相对布局或者帧布局的时候,要将布局下的子控件的宽高改成自适应的宽高,这样重新加载的按钮才不会被原来的布局给覆盖住。 ---2016-07-13(刚写了一遍,没保存成功,所以略写)