2012-05-08 145 views
1

我想在Application類的衍生物的onCreate()方法中創建一個WebView,然後在onCreate()被調用時將其附加到主佈局,並在onDestroyed時將其分離() 叫做。所以,每當一個活動被創建/銷燬時,WebView組件將是相同的(有點單身)。問題是我(與我的Windows API背景)沒有想法如何做到這一點。剛剛新的WebView()/ addiew()/ removeView()?將Android視圖連接到/從佈局

爲什麼我要這樣做,你問? Prevent Android activity from being recreated on turning screen off用幾句話來說,WebView永遠不會被破壞。

回答

2

沒什麼特別的。在清單中將MyApp註冊爲應用程序類名稱。

public class MyApp extends Application 
{ 
    public WebView _WebView = null; 

    @Override 
    public void onCreate() 
    { 
     _WebView = new WebView(getApplicationContext()); 
     // Settings etc. 
     _WebView.loadUrl("url"); 

     super.onCreate(); 
    } 
} 

從main.xml中刪除視圖。

public class MyActivity extends Activity 
{ 
    WebView _WebView; 
    RelativeLayout _Layout; // Should be declared in main.xml. 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 

     _Layout = (RelativeLayout) findViewById(R.id.rl); 
     ViewTreeObserver vto = _Layout.getViewTreeObserver(); 
     vto.addOnGlobalLayoutListener(new MyLayoutListener()); // .layout(0,0,width,height); 

     Display display = getWindowManager().getDefaultDisplay(); 
     MyApp app = (MyApp) this.getApplication(); 
     _WebView = app._WebView; 
     _Layout.addView(_WebView, display.getWidth(), display.getHeight()); 
    } 

    @Override 
    protected void onDestroy() 
    { 
     _Layout.removeView(_WebView); 
     super.onDestroy(); 
    } 
} 

private class MyLayoutListener implements OnGlobalLayoutListener 
{ 
    public void onGlobalLayout() 
    { 
     Display display = getWindowManager().getDefaultDisplay(); 
     _WebView.layout(0, 0, display.getWidth(), display.getHeight()); 
     //_Layout.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
    } 
} 
+0

這條線怎麼樣? 「vto.addOnGlobalLayoutListener(new MyLayoutListener());」如何編碼? MyLayoutListener不存在。 – ElSajko

+0

@ElSajko現在我已經3年過去了。 MyLayoutListener代碼被添加到自動回答中,但我無法解釋,爲什麼以及如何執行此操作。無論如何,代碼是2.3,也許現在應該以另一種方式完成。 – noober

+0

我已經完成了,沒有ViewTreeObserver。但仍然有幫助後。 編輯:Mea Culpa。沒有注意到代碼已經滾動,並且有MyLayoutListener。 NVM – ElSajko