24

所以我是新來的android應用程序寫作,我正在努力工作的實踐應用程序,我可以希望稍後變成東西。在我決定嘗試將webview添加到其中之一之前,我在操作欄中有3個標籤運行良好。現在它崩潰了IllegalStateException。而且由於我目前對android的瞭解不多,所以似乎無法弄清楚哪裏出了問題。Android IllegalStateException:片段沒有附加到活動webview

主要活動:

private ViewPager viewPager; 
private TabsPagerAdapter mAdapter; 
private ActionBar actionBar; 
private String[] tabs = { "Web", "Facebook", "Twitter" }; 

@SuppressLint("NewApi") 
@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    // Initialization 
    viewPager = (ViewPager) findViewById(R.id.pager); 
    actionBar = getActionBar(); 
    mAdapter = new TabsPagerAdapter(getSupportFragmentManager()); 

    viewPager.setAdapter(mAdapter); 
    actionBar.setHomeButtonEnabled(false); 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);   

    // Adding Tabs 
    for (String tab_name : tabs) 
    { 
     actionBar.addTab(actionBar.newTab().setText(tab_name).setTabListener(this)); 
    } 

    /** 
    * on swiping the viewpager make respective tab selected 
    * */ 
    viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() 
    { 

     @Override 
     public void onPageSelected(int position) 
     { 
      // on changing the page 
      // make respected tab selected 
      actionBar.setSelectedNavigationItem(position); 
     } 

     @Override 
     public void onPageScrolled(int arg0, float arg1, int arg2) 
     { 
     } 

     @Override 
     public void onPageScrollStateChanged(int arg0) 
     { 
     } 
    }); 
} 

@Override 
public void onTabReselected(Tab tab, FragmentTransaction ft) 
{ 
} 

@Override 
public void onTabSelected(Tab tab, FragmentTransaction ft) 
{ 
    // on tab selected 
    // show respected fragment view 
    viewPager.setCurrentItem(tab.getPosition()); 
} 

@Override 
public void onTabUnselected(Tab tab, FragmentTransaction ft) 
{ 
} 

與網頁視圖的WebFragment:

public class WebFragment extends Fragment 
{ 

private String url = getString(R.string.website); 

//@Override 
//public void onActivityCreated(Bundle savedInstanceState) 
//{ 
    //super.onActivityCreated(savedInstanceState); 
//} 

@SuppressLint("SetJavaScriptEnabled") 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) 
{ 

    View rootView = inflater.inflate(R.layout.web_fragment, container, false); 

    WebView tolerableWebView = (WebView) getView().findViewById(R.id.webview); 
    tolerableWebView.getSettings().setJavaScriptEnabled(true); 
    tolerableWebView.loadUrl(url); 

    return rootView; 
} 

} 

的TabsPagerAdapter:

public class TabsPagerAdapter extends FragmentPagerAdapter 
{ 

public TabsPagerAdapter(FragmentManager fm) 
{ 
    super(fm); 
} 

@Override 
public Fragment getItem(int index) 
{ 

    switch (index) { 
    case 0: 
     // Top Rated fragment activity 
     return new WebFragment(); 
    case 1: 
     // Games fragment activity 
     return new FacebookFragment(); 
    case 2: 
     // Movies fragment activity 
     return new TwitterFragment(); 
    } 

    return null; 
} 

@Override 
public int getCount() 
{ 
    // get item count - equal to number of tabs 
    return 3; 
} 
} 

的webfragment XML

<?xml version="1.0" encoding="utf-8"?> 
<WebView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/webview" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical"> 

</WebView> 

主要活動的xml:

<android.support.v4.view.ViewPager 
xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"/> 

任何幫助將是巨大的!謝謝

+0

顯示堆棧跟蹤.. – Sionnach733

回答

87

通常,當您在片段不再附加到活動後嘗試執行工作時會出現該錯誤。在觸發IllegalStateException異常增加的支票isAdded回調:http://developer.android.com/reference/android/app/Fragment.html#isAdded()

if(!isAdded()) { 
    return; 
} 
+0

豈不的片段被在的onResume()方法連接?或者這不一定如此? –

+0

這在API級別11以上支持。您可以簡單地使用try catch塊來阻止應用程序在較低的API上崩潰。 –

+8

在哪裏添加此方法? – rala

相關問題