Skip to content

Instantly share code, notes, and snippets.

@guhongya
Last active March 13, 2018 03:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save guhongya/0097e568db67feb708c74c331a28a623 to your computer and use it in GitHub Desktop.
Save guhongya/0097e568db67feb708c74c331a28a623 to your computer and use it in GitHub Desktop.
Android Activity 错误页,异常页 的显示方案

大概思路

在BaseActivity中加载如下的布局,将要显示的布局,和错误页面,异常页都作为子View添加进FrameLayout中,根据需要显示不同页面。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <include layout="@layout/item_title" />

    <FrameLayout
        android:id="@+id/fl_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>
public abstract class BaseActivity extends AppCompatActivity {
    // private LoadSir mLoadSir;
    // private LoadService loadService;
    protected DialogUtils mDialog;

    ViewGroup mContainerView;

    private ViewGroup mEmptyView;

    private ViewGroup mErrorView;

    private TextView mEmptyTips;

    private ImageView mErrorImage;


    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView();
        initRealContent();
        Toolbar toolbar = findViewById(R.id.baseToolbar);
        setUpToolbar(toolbar);
        mDialog = DialogUtils.getInstance(this);
        initView();
    }

    void setContentView() {
        setContentView(R.layout.activity_base);
        mContainerView = findViewById(R.id.fl_container);
        // mLoadSir=LoadSir.getDefault();

    }

    private void initRealContent() {
        getLayoutInflater().inflate(getContentView(), mContainerView);
    }

    protected abstract int getContentView();

    protected abstract boolean showBack();

    protected abstract void initView();

    protected void setUpToolbar(Toolbar toolbar) {
        if (toolbar != null) {
            if (showBack()) {
                setSupportActionBar(toolbar);
                getSupportActionBar().setDisplayShowTitleEnabled(false);
                getSupportActionBar().setDisplayHomeAsUpEnabled(true);
                toolbar.setNavigationIcon(R.drawable.ic_back);
                toolbar.setNavigationOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        onBackPressed();
                    }
                });
            }else{
                toolbar.setVisibility(View.GONE);
            }
        }
    }


    protected void showShortToast(String msg) {
        if (Build.VERSION.SDK_INT >= 20) {
            Toast.makeText(this, msg, android.widget.Toast.LENGTH_SHORT).show();
        } else {
            android.widget.Toast.makeText(this, msg, android.widget.Toast.LENGTH_SHORT).show();
        }
    }

    protected void showError() {
        if (mErrorView == null) {
            mErrorView = (ViewGroup) getLayoutInflater().inflate(R.layout.item_error, new FrameLayout(this), false);
            mContainerView.addView(mErrorView);
            mErrorImage = mErrorView.findViewById(R.id.iv_error);
            mErrorView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    errorReLoad();
                    mErrorView.setVisibility(View.GONE);
                    // showSuccess();
                }
            });
        }

        mErrorView.setVisibility(View.VISIBLE);
    }

    protected void showEmpty(String tips) {
        if (mEmptyView == null) {
            mEmptyView = (ViewGroup) getLayoutInflater().inflate(R.layout.item_empty, new FrameLayout(this), false);
            mEmptyTips = mEmptyView.findViewById(R.id.tvEmptyTips);
            mEmptyView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    
                }
            });
            mContainerView.addView(mEmptyView);
        }
        mEmptyTips.setText(tips);
        mEmptyView.setVisibility(View.VISIBLE);
    }

    protected void showSuccess() {
        if (mEmptyView != null && mEmptyView.getVisibility() == View.VISIBLE) {
            mEmptyView.setVisibility(View.GONE);
        }
        if (mErrorView != null && mErrorView.getVisibility() == View.VISIBLE) {
            mErrorView.setVisibility(View.GONE);
        }
    }

    protected abstract void errorReLoad();

    @Override
    protected void onDestroy() {
        mDialog.closeProgressDialog();
        super.onDestroy();
    }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment