gpt4 book ai didi

java - 如何在android中动态设置布局

转载 作者:太空狗 更新时间:2023-10-29 23:02:25 25 4
gpt4 key购买 nike

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

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

现在我实际上做的是点击 layout1 中的按钮,第二个布局设置如下:

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

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

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

问题是当我返回 layout1someBtn1 的 OnClickListener 不工作。看来我需要为 layout1someBtn1 再次设置 OnClickListener。我如何编写代码才能使它们与最佳实践完美配合?

最佳答案

最佳做法是使用 fragment 而不是更改内容 View 。

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

如果您不想使用 fragment ,您可以这样做:

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

关于java - 如何在android中动态设置布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17070047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com