2012-05-08 6 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なしで作業しました。しかし、まだ役に立つポスト。 EDIT:Mea Culpa。コードにスクロールがあり、MyLayoutListenerがあることに気付かなかった。 Nvm – ElSajko

関連する問題