19

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

setContentView同じ活動に何度もメソッドを使うべきではないことを知りました。それは私にとってはうまくいっていますが。

setContentViewビューを変更するために同じアクティビティに対してメソッドを複数回使用するべきではない理由を誰かが説明できますか?

メモリ関連の例外が発生しますか?誰かが明確にしてくれませんか?

4

3 に答える 3

2

Android プラットフォームには、ビュー間の遷移を処理するための強力なフレームワークが既にあり、アクティビティに関連付けられた各ビューの状態を維持するため、ビューを切り替えることは良い考えではないと思います。これらすべてのことを行うには複雑な実装が必要です。アプリケーションでこれらのことを考慮する必要がなく、アプリケーション全体で 2 つまたは 3 つの画面しかない場合は、ビューを切り替えてみてください。これらのビューを作成するために複雑なロジックと大量のデータが必要な場合、ビューがどのように構造化されているかに基づいても、これは良い方法ではありません。アクティビティによって処理される必要が高くなります。この場合、その特定のアクティビティ内のすべてのビューを宣言して初期化するため、これらすべてのビュー インスタンスを維持するのは大変です。Activty と Task について詳しく知りたい場合は、このリンクを参照してください

于 2013-03-20T09:38:04.323 に答える
0

開発者向けドキュメントによると、setContentView(int layoutResID)は

レイアウトリソースからアクティビティコンテンツを設定します。リソースが膨らみ、すべてのトップレベルのビューがアクティビティに追加されます。

Activityベストプラクティスでは、この方法を使用して、起動時にレイアウトを膨らませます。これは、この方法を使い続けると、将来問題が発生するという意味ではありません。この質問の答えを引用するには

アクティビティのsetContentViewは、実際には、アクティビティで使用されるウィンドウのsetContentViewを呼び出します。これは、レイアウトを拡張するだけではありません。

ViewPagerwithやその他のTabingアプローチを使用するなど、レイアウトを切り替える別の方法を見つけることをお勧めしますFragmentsが、最終的には、やりたいことになります。

この質問はまたあなたが探しているものをあなたに与えるかもしれません。

于 2013-03-20T09:46:09.360 に答える
0

setContentView() を呼び出すたびに、すべてのレイアウトを再度検索する必要がありますが、「できる」と思います。しかし、ここで説明したように、Android のガイドラインに明らかに違反しているため、これはお勧めできません。また、コモンズウェアには非常に重要なポイントがいくつかあります。最も重要なことの 1 つは、Android が通常処理するビューなどからクリーンアップするのを忘れると、メモリ リークが発生しやすくなるということです。

つまり、Android のガイドラインに従い、フラグメントを使用するか、新しいActivity.

于 2013-03-20T09:44:41.747 に答える