0

Androidについて質問があります。メインのxmlレイアウトファイルがあり、(たとえば)FrameLayoutを使用してプレースホルダーを定義するとします。また、コンテンツを表示する他の2つのxmlレイアウトファイルがあると仮定します。したがって、私がやりたいのは、2つのレイアウトのうちの1つを動的かつプログラム的にプレースホルダーに挿入することです。Activitis、Fragments、ViewFlipperなどの概念が存在することは知っています。しかし、次のようなことを行うのは快適だと思います。

public class MainActivity extends Activity {

private FrameLayout placeHolder;
private View view1;
private View view2;


private RelativeLayout canvasPlaceHolder;
private PuzzleCanvas canvas;
private TextView infoLabel;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // init gui
    setContentView(R.layout.activity_main);

    // Load layouts from xml
    LayoutInflater factory = getLayoutInflater();
    view1 = factory.inflate(R.layout.view1, null);
    view2 = factory.inflate(R.layout.view2, null);

}
}

たとえば、次のようなことを行う画面上のボタンを使用します。

@Override
public void onClick(View v) {
    placeHolder.removeView(view1);
    placeHolder.addView(view2);
}

たとえば、通常のコンテンツ(view1)の代わりにloadingAnimation(view2)を表示して、xmlで快適で独立したビューの両方を定義できます。

LayoutInflaterの使用は称賛に値しますか?パフォーマンスとメモリ管理についてはどうですか?あなたはこのことについてどう思いますか?それはAndroidの一般的な方法ですか?

4

2 に答える 2

1

xmlのフレームレイアウトで「include」タグを使用して、両方のxmlをメインxmlに含めます。あなたがしなければならないのは、あなたのアプリのロジックに従って、Javaを介して彼らの「VISIBILITY」を切り替えることです。例:リスナーで:を設定します

public void onClick(View v) {          
    innerView1.setVisibilty(View.INVISIBLE); 
    innerView2. setVisibilty(View.VISIBLE);  
}
于 2012-09-07T01:21:15.607 に答える
1

// xml からレイアウトを読み込みます LayoutInflater factory = getLayoutInflater();

view1 = factory.inflate(R.layout.view1, null);
view2 = factory.inflate(R.layout.view2, null);

LayoutInflater の使用は問題ありませんが、onCreate でこのアクションを直接実行しないことをお勧めします。レイアウトが非常に複雑な場合は、ANR (5 秒以上のレイアウトの描画) が発生する可能性があります。これら 2 つのビューはユーザーの反応後にのみ表示されるため、ハンドラーを使用して sendEmptyMessage を使用することを好みます。

onCreate(...){
    handler.sendEmptyMessage(1);
}

private Handler handler = new Handler(){
    @Override
    public void handleMessage(final Message msgs) {
        if(msgs.what == 1){
            view1 = factory.inflate(R.layout.view1, null);
            view2 = factory.inflate(R.layout.view2, null);
        }
    }
}
于 2012-09-07T03:23:49.033 に答える