Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 我应该将代码放在活动或视图中吗?_Android_View_Android Activity - Fatal编程技术网

Android 我应该将代码放在活动或视图中吗?

Android 我应该将代码放在活动或视图中吗?,android,view,android-activity,Android,View,Android Activity,我正忙于为Android制作我的第一个游戏,但我遇到了很多困难。对我来说,API在某些方面似乎有点奇怪(例如对话框-为什么它们必须经历事件…),但我正在慢慢学习 但是现在,我有点迷路了。我不确定我的代码到底应该放在哪里,我也不知道如何找出最好的方法 我已经创建了自己的视图GameView,它在onDraw事件中进行绘图。我还将我的大部分代码放到GameView中。例如,当您触摸视图(在onTouch事件中)时,我会处理它并执行操作 但是现在我想显示一个标准对话框,我读到它必须通过一个活动来完成,

我正忙于为Android制作我的第一个游戏,但我遇到了很多困难。对我来说,API在某些方面似乎有点奇怪(例如对话框-为什么它们必须经历事件…),但我正在慢慢学习

但是现在,我有点迷路了。我不确定我的代码到底应该放在哪里,我也不知道如何找出最好的方法

我已经创建了自己的视图GameView,它在onDraw事件中进行绘图。我还将我的大部分代码放到GameView中。例如,当您触摸视图(在onTouch事件中)时,我会处理它并执行操作

但是现在我想显示一个标准对话框,我读到它必须通过一个活动来完成,包括showDialog和onDialog事件。我有点困惑,我不能直接通过视图显示对话框

所以我开始想,也许我做错了。。。也许我不应该把我所有的代码都放到视图中,而是把我的代码放到活动中?当我浏览API对话框示例时,它们只是从XML中获取按钮并将事件附加到按钮上,等等,所有这些都在Activy中


我希望我的问题有点清楚。我不确定哪些代码应该放在哪里,以及如何在活动和(游戏)视图之间交互等等。

您应该创建一个带有布局的xml。它将包含GameView,该GameView将了解其中显示的活动。因此,当您在GameView中检测到ex.touch事件时,您可以要求activity显示对话框。见概念:

public void MyActivtiy extends Activity {

  @Override
  public void onCreate() {
     // your initialization
     GameView view = (GameView) findViewById(R.id.gameView);
     view.setCalledActivity(this);
  }

}

public GameView extends View {
  private Context context;

  public void setCalledActivity(Context context) {
     this.context = context;
  }

  @Override
  public void onTouchEvent(...) {
    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setMessage("Are you sure you want to exit?")
    .setCancelable(false)
    .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
       public void onClick(DialogInterface dialog, int id) {
            MyActivity.this.finish();
       }
    })       ;
    AlertDialog alert = builder.create();
    alert.show();
  }
}

很难说你的设计是否好,但我不会太担心


该示例在
活动
中只有很少的代码(基本上只创建菜单),大多数游戏逻辑实际上是在
视图
中实现的。当然,如果你想要一个有响应的游戏,你应该在
onDraw()
方法中拥有尽可能少的内容。

因此,我必须从视图中调用showDialog方法,并在活动中处理onDialog事件,分离代码?请参阅更新的答案。创建对话框不需要任何onDialog事件。API文档说明,如果您管理自己的对话框,则必须确保释放资源等,以免泄漏对话框和/或视图,如果你通过onDialog事件来管理它,Android会自动为你完成这一切。它指的是使用附加图形创建自定义对话框,等等。如果您只想显示一个带有文本的对话框,上面的代码就足够了。