目前有些APP為了提高用戶體驗(yàn),設(shè)置當(dāng)網(wǎng)絡(luò)請(qǐng)求失敗時(shí),顯示另一個(gè)頁面來告知并把是否繼續(xù)請(qǐng)求交給用戶處理辆童,比如這樣
當(dāng)點(diǎn)擊空白處時(shí),重新請(qǐng)求惠赫。所以把鉴,唯一可能相對(duì)比較好的處理方法就是從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();
}
/**
* 代碼很簡(jiǎn)單儿咱,就不解釋了
* 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();
}
}
//點(diǎn)擊空白處
@Override
public void onClick(View view) {
click();
}
public void showNetWorkHint(){
baseTvHint.setText("網(wǎng)絡(luò)失敗點(diǎn)擊空白處重試");
}
public abstract void click();
//方法名字理解即可
public abstract void findView();
public abstract void initView();
布局文件更簡(jiǎn)單
<?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。假設(shè)我的網(wǎng)絡(luò)請(qǐng)求方法叫做
getData();
}
private void getData(){
//當(dāng)你的網(wǎng)絡(luò)請(qǐng)求成功之后混埠,比如我的onNext()方法是成功方法怠缸,那么我就可以在里面添加布局
public void onNext(Data<T> data){
setContentView(R.layout.activity_main);//activity_main為我當(dāng)前頁的布局
}
//在失敗方法里面添加BaseActivity里面的提示
public void onError(Error e){
showNetWorkHint();
}
@Override
public void click() {
//里面寫刷新方法
}
@Override
public void findView() {
//findViewById()
}
@Override
public void initView() {
//初始化
}
代碼很簡(jiǎn)單,只是單一的實(shí)現(xiàn)了我上述的功能钳宪,當(dāng)然BaseActivity所需要實(shí)現(xiàn)的不僅僅這么簡(jiǎn)單凯旭,這段代碼只是給大家一個(gè)思路,如果有什么困難使套,大家一起進(jìn)步。
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者