android - 有没有更好的方法可以在 android 中显示不同的布局?

标签 android android-layout layout crash

我正在尝试制作一个具有多种布局的应用程序。有没有某种有效的方法来显示多个布局?我的应用程序有按钮,每个按钮都会导致不同的布局。因此,任何人都可以给我关于使用什么的想法吗?我今年 14 岁,对 Android 完全陌生。我有一定的java背景,仅此而已。谢谢你的帮助!这是我的主要 Activity ...

package com.example.submenus;

import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {
    public void onBackPressed()  {
        setContentView(R.layout.activity_main);


    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); 

        // This is for Audi A4
        Button button = (Button) findViewById(R.id.a4button);
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            setContentView(R.layout.audi);
            }

        }   ); 

        // This is for Audi A6
        Button button1 = (Button) findViewById(R.id.a6button);
    button1.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            setContentView(R.layout.audia6);
             }

        } ); 

        // This is for Audi Q5
         Button button2 = (Button) findViewById(R.id.q5button);
    button2.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            setContentView(R.layout.audiq5);

            }
    } ); 

        // This is for Audi R8
         Button button3 = (Button) findViewById(R.id.r8button);
    button3.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            setContentView(R.layout.audir8);

        }
    } );


    }
}

再说一次,我只想说这是一个有主菜单的应用程序。在该菜单中,我有多个按钮,相应地导致不同的布局。该应用程序工作正常,直到我按下后退按钮然后单击按钮。让我重新表述一下...我单击一个按钮,它会将我带到正确的布局。然后我可以点击后退按钮,它会将布局带回到主菜单,就像它应该的那样。然后,如果我单击另一个按钮,应用程序就会卡住并崩溃。有没有办法来解决这个问题?感谢您的帮助!

最佳答案

这应该可以解决您的错误,但我认为这是一个非常糟糕的方法。

public class MainActivity extends Activity {
    public void onBackPressed()  {
        // You need to re-findView and re-setOnClickListener to button-button3
        setMain();
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setMain();
    }

    public void setMain() {
        setContentView(R.layout.activity_main); 

        // This is for Audi A4
        Button button = (Button) findViewById(R.id.a4button);
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                setContentView(R.layout.audi);
            }
        }); 

        // This is for Audi A6
        Button button1 = (Button) findViewById(R.id.a6button);
        button1.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                setContentView(R.layout.audia6);
            }
        });

        // This is for Audi Q5
        Button button2 = (Button) findViewById(R.id.q5button);
        button2.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                setContentView(R.layout.audiq5);
            }
        }); 

        // This is for Audi R8
        Button button3 = (Button) findViewById(R.id.r8button);
        button3.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                setContentView(R.layout.audir8);
            }
        });
    }
}

您可以创建很多 Activity ,那么该怎么办?

  1. 创建另一个扩展 Activity 的类

    public class ChildActivity extends Activity {
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            // Create another child.xml in your res > layout
            setContentView(R.layout.child);
        }
    }
    
  2. AndroidManifest.xml 中的 application 标记下注册 activity

    <activity name=".ChildActivity"/>
    
  3. MainActivity 调用 ChildActivity

    // This is for Audi A4
    Button button = (Button) findViewById(R.id.a4button);
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Intent childIntent = new Intent(MainActivity.this, ChildActivity.class);
            startActivity(childIntent); 
        }
    });
    

就是这样。我希望我没有遗漏任何东西。

注意

如果您要使用activity方法。您应该删除 MainActivity 中的 onBackPressed 方法。

关于android - 有没有更好的方法可以在 android 中显示不同的布局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20110619/

相关文章:

Android App 从后台状态重新打开

android - 缺少 Google Awareness API v9.6

android - 以编程方式将选择器 xml 资源设置为可绘制到 ImageView 不起作用

java - 如何将 Icon 放置在 JPanel 的顶部和底部

flutter - 如何从flutter中计算widget的剩余大小?

android - 如何查看 Android native 代码分析?

java - 将 TextField 与 LibGDX 结合使用

android - 如何在 Android 的 GridView 中集中最后一个不均匀的行?

java - map View 上的按钮

android - 如何在 api 17 或更高版本中使 android seekbar 全宽?