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

目前有些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所需要实现的不仅仅这么简单,这段代码只是给大家一个思路,如果有什么困难,大家一起进步。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 179,058评论 25 709
  • 1.什么是Activity?问的不太多,说点有深度的 四大组件之一,一般的,一个用户交互界面对应一个activit...
    JoonyLee阅读 5,858评论 2 51
  • 教练改变生活。把教练技术融入生活,我们的生活就更有品质。分享心锚、前景瞻望、换框法这三个最简单有力的教练工具,学了...
    鹿雯立love阅读 1,530评论 3 19
  • 亲爱的爸爸,我的依靠。 如果我要离开,定是对你充满了不舍。 我是你的骄傲,对此,我深信不疑。我的离开,于你,必是致...
    肉肉2017阅读 253评论 0 0
  • 当想到家人亲情的时候,有时泪目,有时麻木,没有所谓的欢乐,更多的是理性,懂事,不知道怎么用文字表达,突然觉得辛酸而已
    糖会跳阅读 268评论 0 0

友情链接更多精彩内容