2012-10-20 49 views
0

我在我的應用程序中使用基於選項卡的活動,我想用WebViews實現碎片堆棧。在這些WebViews中,我想要捕獲URL請求,並用新的URL替換當前的WebView片段。不幸的是,我總是得到Activity was destroyed Exception,但不知道爲什麼。Android碎片(與WebView) - 活動獲取銷燬

你能給我一些提示如何解決這個問題嗎?

我用下面的代碼(在代碼示例的最後,你會認識到方法handleUrlRequest,我想,以取代目前的片段):

public class FragmentStackSupport extends SherlockFragmentActivity { 
int mStackLevel = 1; 

public static int THEME = R.style.Theme_Sherlock_Light; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    setTheme(THEME); //Used for theme switching in samples 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.fragment_stack); 


    if (savedInstanceState == null) { 
     // Do first time initialization -- add initial fragment. 
     Fragment newFragment = Web.newInstance(mStackLevel); 
     FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
     ft.add(R.id.simple_fragment, newFragment).commit(); 
    } else { 
     mStackLevel = savedInstanceState.getInt("level"); 
    } 
} 

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putInt("level", mStackLevel); 
} 


public void addFragmentToStack() { 
    mStackLevel++; 

    // Instantiate a new fragment. 
    Fragment newFragment = Web.newInstance(mStackLevel); 

    // Add the fragment to the activity, pushing this transaction 
    // on to the back stack. 
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    ft.replace(R.id.simple_fragment, newFragment); 
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
    ft.addToBackStack(null); 
    ft.commit(); 
} 



public static class Web extends SherlockFragment { 
    int mNum; 

    /** 
    * Create a new instance of CountingFragment, providing "num" 
    * as an argument. 
    */ 
    static Web newInstance(int num) { 
     Web f = new Web(); 

     // Supply num input as an argument. 
     Bundle args = new Bundle(); 
     args.putInt("num", num); 
     f.setArguments(args); 

     return f; 
    } 

    /** 
    * When creating, retrieve this instance's number from its arguments. 
    */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mNum = getArguments() != null ? getArguments().getInt("num") : 1; 
    } 

    /** 
    * The Fragment's UI is just a simple text view showing its 
    * instance number. 
    */ 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.hello_world, container, false); 
     View wv = v.findViewById(R.id.webview); 
     WebView webView = ((WebView)wv); 

     webView.loadUrl("http://www.google.at"); 
     webView.setWebViewClient(new MyWebViewClient()); 



     return v; 
    } 
} 

public static class MyWebViewClient extends WebViewClient { 

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String urlString) { 

     handleURLRequest("modal"); 
     return false; 
    } 


    private void handleURLRequest(String transitionStyle){ 

     // here I want to replace the Fragment with a new one. 

    } 
} 

} 

回答

0

最後我得到了它。我通過WebViewClient傳遞Web實例,在那裏處理URL請求並希望執行片段事務。

那裏我打電話instanceOfWeb.getActivity().getSupportFragmentManager().beginTransaction()來初始化碎片交易。