2012-09-07 57 views
0

我有一个关于Android的问题。 假设我们有我们的主要xml布局文件,并通过使用(例如)一个FrameLayout来定义一个占位符。还假设我们有2个其他的xml布局文件显示任何内容。 所以我想要做的是动态和程序化地将两个布局之一插入到占位符中。我知道存在Activitis,片段,ViewFlipper等的概念,但我觉得很舒服,做这样的事情:Android:动态加载布局文件

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); 
} 

例如显示一个加载动画(view2)而不是普通内容(view1),所以我可以在xml中定义舒适和独立的两个视图。

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

回答

1

在xml的框架布局上使用'include'标记,以将xml包含在主xml中。你所要做的就是根据你的应用逻辑,通过java切换他们的'VISIBILITY'。 例如:上的监听器,设置:

public void onClick(View v) {   
    innerView1.setVisibilty(View.INVISIBLE); 
    innerView2. setVisibilty(View.VISIBLE); 
} 
1

从XML LayoutInflater工厂= getLayoutInflater //加载布局();

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

使用LayoutInflater是好的,但我建议不要直接做的onCreate这个动作,如果您的布局很复杂,则可能会导致ANR(笼络5秒布局)。由于这两个视图只在用户反应后出现,我更喜欢用sendEmptyMessage和handler。

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); 
     } 
    } 
}