是否可以让一个活动具有多个xml布局?

时间:2015-04-22 12:45:31

标签: android android-layout android-fragments

是否可以创建一个使用一个活动的应用程序和几个与之关联的布局xml文件?我知道你可以使用setContextView()打开另一个布局但是当我尝试在活动中为其他布局设置任何监听器时它会崩溃吗?除了使用片段之外还有其他方法吗?

3 个答案:

答案 0 :(得分:3)

这取决于你的需求。

您可以创建要在活动中使用的布局集。给它们充气然后在setContentView()中使用它们。这个解决方案肯定会奏效,但你必须非常精确。为什么?对于每个布局更改,您必须确保视图引用不为null,并且它们的引用仍然对应于显示的布局。

创建片段更好,更容易。让我们假设您要在活动中使用4到5个单独的屏幕。 活动类将是巨大的,很难调试。 使用片段会将代码分成4个独立的片段,这样可以更容易保持干净和漂亮的代码。

答案 1 :(得分:2)

尝试将布局夸大到您的活动中,例如:

public class NavigationView extends LinearLayout {

public NavigationView(Context context) {

    super(context);
    this.init(context);

} 

public void init(Context context) {

    LayoutInflater inflater = LayoutInflater.from(context);
    View v = inflater.inflate(R.layout.nav, this, true);

    Spinner spinner = (Spinner) v.findViewById(R.id.navSpinner);
    if(spinner != null) {

        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(context, R.array.nav_sections, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);
    } 

} 

} 

答案 2 :(得分:0)

如果在One Activity中使用Multiple XML layout,App将不会崩溃。

- (IBAction)ButtonClicked:(id)sender {



    NSLog(@"Touched 1 %ld",(long)[(UIButton *)sender tag]);
    if(count%2==0)
    {
        [((UIButton *)sender) setBackgroundImage:[UIImage imageNamed:@"imageA.png"] forState:UIControlStateNormal];
    }
    else
   {
      [((UIButton *)sender) setBackgroundImage:[UIImage imageNamed:@"imageB.png"] forState:UIControlStateNormal];
   }


    [(UIButton *)sender setTitle:@"" forState:UIControlStateNormal];
    count=count+1;

}

在Fragments中也是可能的,但Activity是实现它的最简单方法。