如何在android中动态设置布局 [英] How to set layout dynamically in android

查看:36
本文介绍了如何在android中动态设置布局的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

好吧,假设有一个名为 MainActivity 的 Activity,并且有两个名为 layout1layout2 的布局,它们都有几个按钮.默认情况下,MainActivity 布局是 layout1,如下所示:

Well, Suppose there is an Activity called MainActivity and there are two layouts called layout1 and layout2 both have few buttons. By default MainActivity layout is layout1 like following:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.layout1);

现在我实际上是通过单击 layout1 中的按钮来设置第二个布局,如下所示:

Now what I did actually is by clicking a button in layout1 the second layout is set like following:

    someBtn1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            setContentView(R.layout.layout2);
        }
    });

layout2 中还有一个按钮可以返回layout1,如下所示:

There are another button in layout2 to return back to layout1 like following:

    someBtn2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            setContentView(R.layout.layout1);
        }
    });

问题是当我回到 layout1 然后 someBtn1 的 OnClickListener 不起作用.看来我需要为 layout1someBtn1 再次设置 OnClickListener.我如何编写代码以使它们与最佳实践完美配合?

Problem is when I returned back to layout1 then OnClickListener of someBtn1 is not working. It seems I need to set OnClickListener again for someBtn1 of layout1. How I can write code to make them work perfectly with best practices ?

推荐答案

最佳实践是使用片段而不是更改内容视图.

在您的代码中,带有布局的 setContentView 每次都会重新创建(膨胀)您的所有视图,因此在 someBtn2 单击侦听器中调用 setContentView(R.layout.layout1) 将创建一个没有关联侦听器的新按钮.

In your code, setContentView with layouts recreate (inflate) all your views every time, so the call setContentView(R.layout.layout1) in someBtn2 click listener will create a new button without the associated listener.

如果你不想使用片段,你可以这样做:

If you don't want to use fragments you can do this:

private View view1, view2;

public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  view1 = getLayoutInflater().inflate(R.layout.layout1, null);
  view2 = getLayoutInflater().inflate(R.layout.layout2, null);
  setContentView(view1);

听众将是:

someBtn1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        setContentView(view2);
    }
});


someBtn2.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        setContentView(view1);
    }
});

这篇关于如何在android中动态设置布局的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆