当网络请求不好时显示另一个页面

2016-12-19  本文已影响50人  Google教徒

目前有些APP为了提高用户体验,设置当网络请求失败时,显示另一个页面来告知并把是否继续请求交给用户处理,比如这样

Paste_Image.png

当点击空白处时,重新请求。所以,唯一可能相对比较好的处理方法就是从BaseActivity下手。上代码:

public abstract class BaseActivity extends AppCompatActivity implements View.OnClickListener{

private LinearLayout contentView = null;
private TextView baseTvHint;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {            
   super.onCreate(savedInstanceState);    
   setContentView(R.layout.base_layout);    //自定义setContentView();
}
/** 
* 代码很简单,就不解释了 
* base_layout 是你自己的BaseActivity里面的Layout
* @param layoutResID 
*/
@Override
public void setContentView(@LayoutRes int layoutResID) {
   if (contentView == null && R.layout.base_layout == layoutResID){
       super.setContentView(R.layout.base_layout);
       contentView = (LinearLayout) findViewById(R.id.baseLayoutId);
       baseTvHint = (TextView) findViewById(R.id.baseTvHint);
       contentView.setOnClickListener(this);
   }else if (layoutResID != R.layout.base_layout){
       View addView = LayoutInflater.from(this).inflate(layoutResID, null);
       contentView.removeAllViews();
       contentView.addView(addView, new ViewGroup.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
       findView();
       initView();
  }
}

//点击空白处
@Override
public void onClick(View view) {   
 click();
}

public void showNetWorkHint(){   
 baseTvHint.setText("网络失败点击空白处重试");
}

public abstract void click();

//方法名字理解即可
public abstract void findView();

public abstract void initView();
布局文件更简单
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout      
  xmlns:android="http://schemas.android.com/apk/res/android"    
  xmlns:tools="http://schemas.android.com/tools"    
  android:id="@+id/baseLayoutId"    
  android:orientation="vertical"    
  android:layout_width="match_parent"    
  android:layout_height="match_parent"    
  android:gravity="center"    
  tools:context=".base.BaseActivity"    
>
  <TextView    
    android:id="@+id/baseTvHint"
    android:layout_width="wrap_content"    
    android:layout_height="wrap_content"    
    android:textSize="22sp"    
  />
</LinearLayout>
在你的其他Activity里面继承之后,就可以直接使用了
public class MainActivity extends BaseActivity {
 @Override
 protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   //不要在你的onCreate里面直接setContentView。假设我的网络请求方法叫做  
   getData();
}
private void getData(){
  //当你的网络请求成功之后,比如我的onNext()方法是成功方法,那么我就可以在里面添加布局
  public void onNext(Data<T> data){
     setContentView(R.layout.activity_main);//activity_main为我当前页的布局
  }
  //在失败方法里面添加BaseActivity里面的提示
  public void onError(Error e){
     showNetWorkHint();
  }

 @Override
 public void click() {    
   //里面写刷新方法
 }
 @Override
 public void findView() {
   //findViewById()
 }
 @Override
 public void initView() {
  //初始化
 }

代码很简单,只是单一的实现了我上述的功能,当然BaseActivity所需要实现的不仅仅这么简单,这段代码只是给大家一个思路,如果有什么困难,大家一起进步。

上一篇下一篇

猜你喜欢

热点阅读