1. 程式人生 > >切換不同的資料狀態佈局,包含載入中、空資料和出錯狀態(利用開源框架)

切換不同的資料狀態佈局,包含載入中、空資料和出錯狀態(利用開源框架)

implementation 'com.github.Bakumon:StatusLayoutManager:1.0.4'

將要動態載入的佈局用SwipeRefreshLayout包含,佈局如下

    <android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/act_index_srl"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <WebView
            android:id="@+id/act_webview_wv"
            android:layout_width="match_parent"
            android:layout_height="match_parent"

            >

        </WebView>
    </android.support.v4.widget.SwipeRefreshLayout>

Java類,通過webView載入完成後,改變頁面狀態

    @Override
    public void initView() {
        setContentView(R.layout.act_index_web);
        Intent intent = getIntent();
        String strUrl = intent.getStringExtra("index");
        webView = findViewById(R.id.act_webview_wv);
        webView.loadUrl(strUrl);
        webView.setWebViewClient(new WebViewClient(){

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                statusLayoutManager.showSuccessLayout();
            }

        });

        setWebInit();
        initSRL();


    }

    private void initSRL() {
        swipeRefresh = findViewById(R.id.act_index_srl);
        swipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                swipeRefresh.setRefreshing(false);
            }
        });
        statusLayoutManager = new StatusLayoutManager.Builder(swipeRefresh)
                .setOnStatusChildClickListener(new OnStatusChildClickListener() {
                    @Override
                    public void onEmptyChildClick(View view) {
//                        Toast.makeText(indexViewActivity.this, R.string.reload_empty, Toast.LENGTH_SHORT).show();
                        statusLayoutManager.showLoadingLayout();
//                        getData(1000);
                    }

                    @Override
                    public void onErrorChildClick(View view) {
//                        Toast.makeText(MainActivity.this, R.string.reload_error, Toast.LENGTH_SHORT).show();
                        statusLayoutManager.showLoadingLayout();
//                        getData(1000);
                    }

                    @Override
                    public void onCustomerChildClick(View view) {
//                        if (view.getId() == R.id.tv_customer) {
////                            Toast.makeText(MainActivity.this, R.string.request_access, Toast.LENGTH_SHORT).show();
//                        } else if (view.getId() == R.id.tv_customer1) {
////                            Toast.makeText(MainActivity.this, R.string.switch_account, Toast.LENGTH_SHORT).show();
//                        }

                    }
                })
                .build();
        statusLayoutManager.showLoadingLayout();

//        statusLayoutManager.showSuccessLayout();

    }

    @Override
    public String setTitleText() {
        return "微博主頁";
    }

    public void setWebInit() {
        /* 設定支援Js,必須設定的,不然網頁基本上不能看 */
        webView.getSettings().setJavaScriptEnabled(true);
        /* 設定快取模式,我這裡使用的預設,不做多講解 */
        webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
        /* 設定為true表示支援使用js開啟新的視窗 */
        webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        /* 大部分網頁需要自己儲存一些資料,這個時候就的設定下面這個屬性 */
        webView.getSettings().setDomStorageEnabled(true);
        /* 設定為使用webview推薦的視窗 */
        webView.getSettings().setUseWideViewPort(true);
        /* 設定網頁自適應螢幕大小 ---這個屬性應該是跟上面一個屬性一起用 */
        webView.getSettings().setLoadWithOverviewMode(true);
        /* HTML5的地理位置服務,設定為true,啟用地理定位 */
        webView.getSettings().setGeolocationEnabled(true);
        /* 設定是否允許webview使用縮放的功能,我這裡設為false,不允許 */
        webView.getSettings().setBuiltInZoomControls(false);
        /* 提高網頁渲染的優先順序 */
        webView.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
        /* 設定顯示水平滾動條,就是網頁右邊的滾動條.我這裡設定的不顯示 */
        webView.setHorizontalScrollBarEnabled(false);
        /* 指定垂直滾動條是否有疊加樣式 */
        webView.setVerticalScrollbarOverlay(true);
        /* 設定滾動條的樣式 */
        webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
        /* 這個不用說了,重寫WebChromeClient監聽網頁載入的進度,從而實現進度條 */
        webView.setWebChromeClient(new WebChromeClient());

        webView.getSettings().setDomStorageEnabled(true);
    }