首页 > 解决方案 > 在 Android Studio 中单击按钮时呈现新视图

问题描述

我为我的应用程序创建了一个菜单页面,其中有 4 个按钮,每个按钮具有不同的功能。在添加此菜单页面之前,我的代码在我的 activity_main.xml 中看起来像这样

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

        //sets full screen
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);

        //set no title
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);

        this.setContentView(new GameSurface(this)); 

现在我有了这个菜单页面,其中包含我在 MainActivity 类中以下列方式分配给变量的 4 个按钮(仅显示一个用于示例目的)。

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

        Button newGameBtn = findViewById(R.id.new_game_btn);

然后我像这样创建了 onclick 侦听器

newGameBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });

我在其中尝试了不同的方法来加载 GameSurface 类(加载游戏之前的类),它扩展了 SurfaceView 并实现了 SurfaceHolder.Callback。任何建议将不胜感激。

标签: javaandroidandroid-studio

解决方案


为了解决这个问题,我采取了以下步骤。

在我的 MainActivity 我添加了以下代码:

public class MainActivity extends AppCompatActivity {
    private Context mContext = this;


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

        Button newScreen = (Button) findViewById(R.id.new_game_btn);
        Button exit = (Button) findViewById(R.id.exit_btn);

        newScreen.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(mContext, GameActivity.class);
                mContext.startActivity(intent);
            }
        });

GameActivity 类包括我在 MainActivity 中用于运行表面视图的上述代码,如下所示以供参考。

//Launches a surface view

public class GameActivity extends Activity {

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

        //sets full screen
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);

        //set no title
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);

        this.setContentView(new GameSurface(this));
    }
}

我的 GameSurface 类扩展了 SurfaceView 并且包含了游戏的逻辑。应该注意的是,为了做到这一点,我必须创建一个 activity_game.xml 文件并将其与我的游戏表面视图链接,如下所示:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:background="#0099cc" tools:context=".GameActivity">
    <com.example.fxgame.GameSurface
        android:id="@+id/mainview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</FrameLayout>

在实现这个之后仍然无法正常工作,但是使用输出日志我发现我还没有将从我的 MainActivity 引用的活动添加到我的 android 清单中,其中定义了活动。这已通过在标签中添加以下代码行来纠正:

<activity android:name=".GameActivity" />

我花了一整天的时间来解决这个问题,所以我希望它可以帮助别人。


推荐阅读