2013-10-21 128 views
0

我已經實現了帶有片段的標籤佈局,並且一切正常。 我不喜歡的唯一的事情是在選項卡中的網頁視圖(每當同一個網站加載時) 每當我離開標籤頁然後再回到它時加載網站。 有什麼辦法讓網頁視圖加載一次? 我真的不知道從哪裏開始...在帶有片段的標籤佈局中的android web視圖

下面是類TabInfo(輔助類),呼籲所有選項卡首次添加標籤方法的代碼,並且標籤改變事件處理程序

private class TabInfo { 
      private String tag; 
      private Class clss; 
      private Bundle args; 
      private Fragment fragment; 

      TabInfo(String tag, Class clazz, Bundle args) { 
       this.tag = tag; 
       this.clss = clazz; 
       this.args = args; 
      } 

     } 

private void addTab(String tag, String title, TabInfo tabInfo) { 
     TabSpec ts = getTabSpec(tag, title); 
     // Attach a Tab view factory to the spec 
     ts.setContent(new TabFactory(this)); 
     // String tag = tabSpec.getTag(); 

     // Check to see if we already have a fragment for this tab, probably 
     // from a previously saved state. If so, deactivate it, because our 
     // initial state is that a tab isn't shown. 
     tabInfo.fragment = getSupportFragmentManager().findFragmentByTag(tag); 
     if (tabInfo.fragment != null && !tabInfo.fragment.isDetached()) { 
      FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
      ft.detach(tabInfo.fragment); 
      ft.commit(); 
      getSupportFragmentManager().executePendingTransactions(); 
     } 

     mTabHost.addTab(ts); 
    } 


    public void onTabChanged(String tag) { 

      try { 
       TabInfo newTab = (TabInfo) this.mapTabInfo.get(tag); 
       if (mLastTab != newTab) { 
        FragmentTransaction ft = this.getSupportFragmentManager().beginTransaction(); 
        if (mLastTab != null) { 

         if (mLastTab.fragment != null) { 
          ft.detach(mLastTab.fragment); 
         } 
        } 
        if (newTab != null) { 

         if (newTab.fragment == null) { 
          newTab.fragment = Fragment.instantiate(this, newTab.clss.getName(), newTab.args); 
          ft.add(R.id.realtabcontent, newTab.fragment, newTab.tag); 
         } else { 
          ft.attach(newTab.fragment); 
         } 

        } 

        mLastTab = newTab; 
        ft.commit(); 
        // this.getSupportFragmentManager().executePendingTransactions(); 
       } 
       // fillCommonData(); 
      } catch (Exception e) { 
       LogHelper.WriteLogError("error in onTabChanged function", e); 
      } 
     } 

感謝

+0

定製類展示你的代碼請。只是我的想法,我想你使用片段和動作欄的標籤。對?如果沒有,你可以不讀更多...在代碼中,你每次調用替換片段和傳遞新的Fragment實例,這種方式onCreateView和onActivityCreated調用每次我想你的webView.loadUrl內的這些方法之一,這就是爲什麼你的webview reaload每次。在調用片段事務的tabClickListener中,您應該嘗試通過標記查找片段,如果片段存在,則將其傳遞給帶有標記的事務,如果不是,則創建它 –

+0

hello,我添加了代碼 – Apperside

回答

0

這是一個猜測,但覆蓋shouldOverrideUrlLoading(),並返回true,當你不想重裝。

shouldOverrideUrlLoading()是WebViewClient 的方法,在您的網頁流量,來電setWebViewClient並將它傳遞實現shouldOverrideUrlLoading

mWebView.setWebViewClient(new WebViewClient(){ 

    public boolean shouldOverrideUrlLoading(WebView webview, String url){ 
     if(/* code to determine if already loaded/tab selected */) return true; 
     return false; 
    } 

});