java - 在 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。任何建议将不胜感激。
解决方案
为了解决这个问题,我采取了以下步骤。
在我的 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" />
我花了一整天的时间来解决这个问题,所以我希望它可以帮助别人。
推荐阅读
- java - Gradle 在应用程序中崩溃:transformDexWithInstantRunSlicesApkForDebug
- mysql - mysql。如何使用两个不同的文本记录从日志表中选择用户
- c - Adding /*const*/ instead of const qualifier to char * param in function prototype
- java - Spring Annotation Configs - dynamically create classes based on YAML config
- npm - 更改 package.json 的路径
- mysql - 如何正确地将 JavaFX 应用程序连接到 MySQL Workbench
- java - 如何修复weblogic模块异常问题
- bash - 在 Bash kill 错误中创建新进程后
- visual-studio-code - 仅删除一个标志,而不是所有标志直到最后一个选项卡
- mysql - 如何在一个视图中显示超过 1 个表格