0

我有一个关于安卓的问题。假设我们有我们的主要 xml 布局文件,并通过使用(例如)FrameLayout 来定义一个占位符。还假设我们有 2 个其他 xml 布局文件显示任何内容。所以我想要做的是以编程方式将两种布局之一动态地注入到占位符中。我知道存在 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);
}

例如显示 loadingAnimation (view2) 而不是普通内容 (view1),因此我可以在 xml 中定义舒适和独立的视图。

LayoutInflater 的使用值得称道吗?性能和内存管理呢?你怎么看待这件事?这是Android中的常见方式吗?

4

2 回答 2

1

在 xml 的框架布局上使用 'include' 标记以将您的 xml 包含在主 xml 中。您所要做的就是根据您的应用程序逻辑通过 java 切换他们的“可见性”。例如:在侦听器上,设置:

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 秒)。由于这两个视图仅在用户反应后出现,我更喜欢使用 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 回答