« 打ち上げじゃなく反省会 | トップページ | 仕事と趣味とランニング »

2014.02.22

ActivityのWidgetを動的に入れ替えるちょっとだけ面倒でない方法

Androidのアプリを作るとき、ひとつのActivityで、状況に応じてWidgetを動的に入れ替えたい場合があります。 一度に全部のボタンは不要で、他のコンテンツの表示領域を広く確保したいときなどですね。

よく、onCreateButtonを動的に生成し、コンテナにaddViewすると説明されているのを見ますが、実際、コード中でインスタンスを生成して見た目に関する設定をするのって、それなりに面倒な作業じゃないかなと思いまして、

Button自体は、main_activity.xml の、しかるべきコンテナ(LinearLayoutなど)に、全部配置しておき、見た目の設定はビジュアルに済ませて、実行時に、removeAllViewsで、一旦全部削除すればよいのです。

以下のような感じ(実際に動かしているコードではないのでお気をつけて)

main_activity.xml

<LinearLayout id="@+id/linearLayout"  ... >
  <Button id="@+id/button1" ... />
  <Button id="@+id/button2" ... />
  <Button id="@+id/button3" ... />
  <Button id="@+id/button4" ... />
</LinearLayout>

MainActivity.java

public class MainActivity extends Activity {
  ViewGroup linearLayout1 = null;
  Button button1 = null;
  Button button2 = null;
  Button button3 = null;
  Button button4 = null;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    // find container widget
    linearLayout1 = (ViewGroup)findViewById(R.id.linearLayout1);
    // find each buttons
    button1 = (Button)findViewById(R.id.button1);
    button2 = (Button)findViewById(R.id.button2);
    button3 = (Button)findViewById(R.id.button3);
    button4 = (Button)findViewById(R.id.button4);
    changeState(0);
    //
    // ...
    //
  }
  private changeState(int state) {
    linearLayout1.removeAllViews();
    switch(state) {
    case 0:
      linearLayout1.addView(button1);
      linearLayout1.addView(button2);
      break;
    case 1:
      linearLayout1.addView(button3);
      linearLayout1.addView(button4);
      break;
    }
    //
    // ...
    //
  }
}

LinearLayoutの中身を均等割り付けするように設定しておけば、それなりにお手軽。

派手じゃないけど、堅実な動きですよ。


以下、GitHubのGist試用

ひとつのGist中で、ファイルの順番は入れ替えられないのかな。あと、なんでJavaは8タブにしかならないのか。

« 打ち上げじゃなく反省会 | トップページ | 仕事と趣味とランニング »

プログラミング」カテゴリの記事

Java / Apache」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: ActivityのWidgetを動的に入れ替えるちょっとだけ面倒でない方法:

« 打ち上げじゃなく反省会 | トップページ | 仕事と趣味とランニング »

2019年5月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
フォト

Google AdSense

銀の弾丸

無料ブログはココログ

他のアカウント