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

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

作者: Google教徒 | 来源:发表于2016-12-19 17:36 被阅读50次

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

    相关文章

      网友评论

          本文标题:当网络请求不好时显示另一个页面

          本文链接:https://www.haomeiwen.com/subject/muptvttx.html