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