2013-03-20 13 views
18

setContentView(R.layout.main)を使用して、同じアクティビティのビューを切り替えています。私はいくつかの非同期タスクを呼び出すと、私はsetContentView(R.layout.main)メソッドを呼び出すことによってビューを変更している後、メインレイアウトファイルのデータを入力しています。同じアクティビティのレイアウトファイルを変更する

同じアクティビティでsetContentViewメソッドを複数回使用しないでください。それは私のためにうまくいっていますが。

誰も同じアクティビティでビューを変更するためにsetContentViewメソッドを複数回使用しないでください。

メモリ関連の例外が作成されますか?誰か明確にしてもらえますか?

+0

例外が発生することはわかっていません。 (Sys Memoryが低いときにこれを行うとOutOfMemory Exceptionを除く)他の人の言うことを聞いてみましょう。 – Calvin

+0

関連:http://stackoverflow.com/q/6811989/783284 – Cody

答えて

2

私はアンドロイドプラットフォームは既にビュー間の移行を処理し、アクティビティに関連付けられた各ビューの状態を維持する強力なフレームワークを持っているので、代わりに既存のフレームワークを使用することをお勧めしますあなたがこれらすべてのことをするために通過しなければならない複雑な実装の考え方。アプリケーションでこれらのことを気にする必要がなく、アプリケーション全体に2つまたは3つの画面しかない場合は、ビューを切り替えることができます。このようなビューを作成するために必要な複雑なロジックと多くのデータを持っている場合は、ビューの構造に基づいていても、これを行う良い方法はありません。ビューを追加する場合は、アプリケーションに機能アクティビティによって処理される必要が高くなります。この場合、特定のアクティビティ内のすべてのビューを宣言して初期化し、これらのビューインスタンスをすべて維持することは重いです。あなたがアクティビティとタスクについて親切に知りたい場合は、refer this link

+3

言い換えれば、ビューを変更することは、おそらくロジックを変更することを意味するため、新しいアクティビティがより適切です。 – adrianp

+0

私は、ビューを変更した後、以前のビューに割り当てられたメモリが割り当て解除されるかどうかを知りたがっています。もう1つこのプロセスによってメモリー例外が発生します。これらの2つの問題を明確にすることができます。setContentViewメソッドを使用して、再生回数 –

+0

メモリの例外が発生していますか? – Neil

0

いつもsetContentView()を呼び出すたびに、私はあなたがそれを行うことができると思う以外に、すべてのレイアウトを再度見つけなければなりません。しかし、議論されたようにhereこれは明らかにアンドロイドのガイドラインに反するので、illとアドバイスされています。また、Commonswareはいくつかの非常に重要なポイントを持っていますhere最も重要なことの一つは、Androidが通常あなたのために処理するあなたの意見などからものをきれいにすることを忘れてメモリをリークする傾向があることです。

Androidのガイドラインに従い、Fragmentsを使用するか、新しいActivityを使用してください。

0

developer docs setContentView(INT layoutResID)によれば、レイアウトリソースから活動内容を設定

に使用されます。すべてのトップレベルビューをアクティビティに追加して、リソースを膨らませます。

ベストプラクティスでは、この方法を使用して起動時にActivityレイアウトを膨張させます。これは、このメソッドを使用し続けると、将来問題が発生することを意味するものではありません。 this質問

に答えを引用するには、あなたの活動にsetContentViewは、実際に自分自身だけでレイアウトを膨らませるよりも多くを行う活動で使用されるウィンドウ上でsetContentViewを呼び出します。

私はあなたがFragmentsViewPagerを使用してのようなレイアウトを切り替えるための別の方法または他のいくつかのタブ移動の方法を見つけることを示唆しているが、最終的にそれはすべてあなたが何をしたいのかにまで来ています。

This質問すると、あなたが探しているものも表示される場合があります。

関連する問題