【问题标题】:Should I put my code in the Activity or the View?我应该把我的代码放在 Activity 还是 View 中?
【发布时间】:2010-12-17 11:12:57
【问题描述】:

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

但现在,我有点迷路了。我不确定将我的代码准确地放在哪里,而且我真的不知道如何找出最好的方法。

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

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

所以我开始想,也许我做错了……也许我不应该把我所有的代码都放在 View 中,而应该把我的代码放在 Activity 中?当我浏览 API Dialog 示例时,它们只是从 XML 中获取按钮并将事件附加到它们,等等,所有这些都在 Activiy 中。

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

【问题讨论】:

    标签: android view android-activity


    【解决方案1】:

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

    LunarLander 示例在Activity 中的代码非常少(基本上只创建菜单),大部分游戏逻辑确实在View 中实现。当然,如果你想要一个响应式游戏,你应该尽可能少地在 onDraw() 方法本身中使用。

    【讨论】:

      【解决方案2】:

      您应该创建一个带有布局的 xml。它将包含 GameView,它将知道它在其中显示的活动。所以,当你检测到前。在您的 GameView 中触摸事件,您将能够要求活动显示对话框。查看概念:

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

      【讨论】:

      • 那我得从View中调用showDialog方法,在Activity中处理onDialog事件,分离代码?
      • 查看更新的答案。您不需要任何 onDialog 事件来创建对话框。
      • API 文档指出,如果您管理自己的对话框,则必须确保释放资源等,以免泄漏对话框和/或视图,并且如果您通过 onDialog 事件进行管理,Android 确实这一切都会自动为您服务。
      • 它是指使用附加图形等创建自定义对话框。如果你只想显示一个带有文本的对话框,上面的代码就足够了。
      猜你喜欢
      • 2019-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多