AndroidはView Stubを使って、多状態ページ切り替えベースクラスを実現します.

3862 ワード

1、View Stubの基本使用:
(1):レイアウトファイル

Android:layout:引用のレイアウトファイルです. 
(2):コードコール表示View Stub
try {
    //     inflate ,  inflate  
    View inflated = mVSLoading.inflate();
    AutoUtils.auto(inflated);
} catch (Exception e) {
    //    inflate    ,  setVisibility    
    mVSLoading.setVisibility(View.VISIBLE);
}
2、状態動的にactivityの基質を切り替える実現:
 
public abstract class BaseActivity extends AppCompatActivity {
    private ViewStub mVSLoading;
    private ViewStub mVSFailedToLoad;
    private ViewStub mVSNetworkError;
    private ViewStub mVSEmptyData;
    private ViewStub mVSNormalData;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.setContentView(R.layout.activity_base);
        initView();
    }

    private void initView() {
        mVSLoading = findViewById(R.id.vs_loading);
        mVSFailedToLoad = findViewById(R.id.vs_failed_to_load);
        mVSNetworkError = findViewById(R.id.vs_network_error);
        mVSEmptyData = findViewById(R.id.vs_empty_data);
        mVSNormalData = findViewById(R.id.vs_normal_data);
    }

    @Override
    public void setContentView(int id) {
        mVSNormalData.setLayoutResource(id);
    }

    protected void setVSLoading() {
        initVisibility();
        try {
            //     inflate ,  inflate  
            View inflated = mVSLoading.inflate();
        } catch (Exception e) {
            //    inflate    ,          ,  setVisibility    
            mVSLoading.setVisibility(View.VISIBLE);
        }
    }

    public void setVSFailedToLoad() {
        initVisibility();
        try {
            //     inflate ,  inflate  
            View inflated = mVSFailedToLoad.inflate();
            TextView textView = inflated.findViewById(R.id.textView);
            textView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    setOnClickRefresh();
                }
            });
        } catch (Exception e) {
            //    inflate    ,          ,  setVisibility    
            mVSFailedToLoad.setVisibility(View.VISIBLE);
        }
    }

    public void setVSNetworkError() {
        initVisibility();
        try {
            //     inflate ,  inflate  
            View inflated = mVSNetworkError.inflate();

        } catch (Exception e) {
            //    inflate    ,          ,  setVisibility    
            mVSNetworkError.setVisibility(View.VISIBLE);
        }
    }

    public void setVSEmptyData() {
        initVisibility();
        try {
            //     inflate ,  inflate  
            mVSEmptyData.inflate();
        } catch (Exception e) {
            //    inflate    ,          ,  setVisibility    
            mVSEmptyData.setVisibility(View.VISIBLE);
        }
    }

    public void setVSNormalData() {
        initVisibility();
        try {
            //     inflate ,  inflate  
            mVSNormalData.inflate();
        } catch (Exception e) {
            //    inflate    ,          ,  setVisibility    
            mVSNormalData.setVisibility(View.VISIBLE);
        }
    }

    public void initVisibility() {
        mVSLoading.setVisibility(View.GONE);
        mVSFailedToLoad.setVisibility(View.GONE);
        mVSEmptyData.setVisibility(View.GONE);
        mVSNetworkError.setVisibility(View.GONE);
        mVSNormalData.setVisibility(View.GONE);
    }

    protected abstract void setOnClickRefresh();
}
 ソースコードのダウンロード
自分のニーズに合わせて拡張できます.