13

レイアウトの変更中にsetContentViewを複数回使用するのは悪いですか?

一部の人々はそれが悪いと言い、その理由を決して言いません。

ボタンを使用してレイアウトを変更する他のものはありますか?

4

3 に答える 3

13

Android Documentsを見てみましょう。

アクティビティ コンテンツを明示的なビューに設定します。このビューは、アクティビティのビュー階層に直接配置されます。

そのsetContentViewため、レイアウトを上書きして、新しいレイアウトに置き換えます。通常、これは onCreate で 1 回だけ行います。理論的にはもっと多くのことを行うことができますが、レイアウト全体を再描画する必要があり、これには時間がかかる場合があります。必要なものに応じて、いくつかの代替手段があります。

  1. ViewAnimator : これは、ビューを連続して複数回変更する場合に、すばやくアニメーションを表示するのに役立ちます。
  2. フラグメント- ビュー全体を再描画する代わりに、フラグメントを切り替えることができます。各フラグメントは一種のミニ アクティビティであり、全体として、これにはコードがはるかに適切に含まれます。
  3. Pass Intent Arguments - セットアップを支援するためにアクティビティに情報を渡します。最初のアクティビティは、最初のアクティビティから受け取った情報に基づいて自身を設定する方法を知っている共通の 2 番目のアクティビティに情報を渡します。

あなたの特定のアプリケーションに関しては、ここに私がすることがあります:

  1. 各バンドは特定のレイアウトに従います。可能なレイアウトは 1 つだけか、場合によってはいくつかあります。
  2. Band アクティビティが開始されると、適切なレイアウトが選択され、そこに何があるかを認識してデータが取り込まれます。

Android SDKは、あるアクティビティから別のアクティビティにデータを渡す方法を示しています。次のようなものを使用して、最初のアクティビティから 2 番目のアクティビティが必要とするデータを渡すだけです。

Intent intent=new Intent(...);
intent.putExtra("Album","Some Album")
startActivity(intent);

2 番目のアクティビティでは、次のことを行います。

Intent intent=getIntent();
String albumName=intent.getExtraString("Album");
//Does something with albumName, maybe get a TextView and .setText()
于 2014-03-06T15:00:48.097 に答える
1

はい、これは悪いことです。レイアウトでアクティビティが膨らむためです。レイアウトに多くのビューがある場合、時間がかかる場合があります。

これを避けるには、すべてのレイアウトを配置し、showNext() と showPrevious() で切り替えるViewAnimatorを使用する必要があります。

<ViewAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ViewAnimator"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <RelativeLayout>  </RelativeLayout>

    <RelativeLayout>  </RelativeLayout>

</ViewAnimator>

そしてあなたのコードで:

// Don't forget the setContentView
//
// Load the ViewAnimator and display the first layout
ViewAnimator va = (ViewAnimator) findViewById(R.id.ViewAnimator);
// Switch to the second layout
va.showNext();
// Add another layout at the third position
LinearLayout fooLayout = new LinearLayout(this);
va.addView(fooLayout, 3, new ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT));
于 2014-03-06T15:21:22.283 に答える
0

答えを待っているので、例を示すことはできません。大丈夫、歌詞のアプリがあります(バンドの歌詞が表示されます)、アルバムは新しい活動ですが、多くの活動はしたくないので、曲をレイアウトだけにして、ボタンを押すとビューを変更したいのです

あなたはこれについて間違った方法で行っているようです。UI を変更したい場合Activityは、Fragments の方が適しています。そこには少し学習曲線がありますが、それは優れたアンドロイド設計であり、十分に文書化されています.

さらに、フォーマットとコンテンツを混同しているようです。歌詞を表示している場合は、曲ごとに新しいレイアウトは必要ありません。歌詞を変更して、同じアクティビティに保持するだけです。あなたが行っていることは、アクセスしようとしている各 Web ページ用に新しい Web ブラウザーを作成することに似ています。代わりに、歌詞を保存し、単一のアクティビティ (またはフラグメント) に表示してそれらの歌詞を表示する方法を見つけてください。同じことが各アルバムにも当てはまります。1 つのアクティビティで、アルバム カバーをコーナー (または背景) に表示し、タイトル、リリース日などをテキストとして表示し、その下に曲のリストを表示します。の実際の内容はTextView変更される可能性がありますが、レイアウトは同じである必要があります。

于 2014-03-06T15:08:50.947 に答える