【问题标题】:Pass data from the Activity to SurfaceView将数据从 Activity 传递到 SurfaceView
【发布时间】:2011-06-05 02:57:00
【问题描述】:

我不确定问题出在哪里。我想如果活动会将信息传递给它实现的表面视图。基本上我试图做到这一点,以便当有人从主菜单中选择他们选择的游戏布局(通过 Intent 传递它)然后转到 PlayGame 类。 (我有它从意图中给出的数字)。该活动通过布局使用 SurfaceView。然后在它调用图像并分配它们的表面视图中,我尝试使用 if else 来确定它应该使用哪些图片。没用。不完全确定该怎么做。如果有更好的方法可以使用主页上先前选择的图像。看起来像这样。

主类(只是传递意图的按钮之一)

Button surfButton = (Button) findViewById(R.id.play1_btn);
    surfButton.setOnClickListener(new View.OnClickListener()
    {
        public void onClick(View surfing)
        {
            Intent play = new Intent(Main.this, PlayGame.class);
            play.putExtra("gameType" , 1);
            startActivity(play);
        }
    });

PlayGame 类

 @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);  
    Intent typ = getIntent();
    type = typ.getIntExtra("gameType", 0);

    setContentView(R.layout.game);        
    gameLoopView = (GameLoopView) findViewById(R.id.gnarlyned); 


}

游戏类:

private void loadImages(Context context) {
            type = playGame.type;
    Resources res = context.getResources();

    if (type == 1){
        skyImage = BitmapFactory.decodeResource(res, R.drawable.sky);

    }
    else if (type == 2){
        skyImage = BitmapFactory.decodeResource(res, R.drawable.snowbg);

    }

更多图片不仅仅是一张,但为了节省空间,它只是一张。任何帮助,将不胜感激。我确定我在那里做错了什么。

编辑:这是此设置导致的强制关闭的日志猫。

06-06 17:55:01.655: 错误/AndroidRuntime(16229): 致命异常: main 06-06 17:55:01.655: 错误/AndroidRuntime(16229): java.lang.RuntimeException: 无法启动活动 ComponentInfo{fallacystudios.gnarlyned/fallacystudios.gnarlyned.PlayGame}: android.view.InflateException: 二进制 XML 文件行# 7: 膨胀类 fallacystudios.gnarlyned.GameLoopView 时出错 06-06 17:55:01.655: 错误/AndroidRuntime(16229): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 06-06 17:55:01.655:错误/AndroidRuntime(16229):原因:android.view.InflateException:二进制 XML 文件第 7 行:膨胀类 fallacystudios.gnarlyned.GameLoopView 时出错 06-06 17:55:01.655: 错误/AndroidRuntime(16229): 由: java.lang.reflect.InvocationTargetException 引起 06-06 17:55:01.655: 错误/AndroidRuntime(16229): 原因: java.lang.NullPointerException

然后一大堆堆大小溢出

只有当我在 loadImages 部分中有 if(gameType == 1) 和 else if(gameType == 2) 时,才会发生所有这些情况。这样做是为了在选择该地图时仅使用某些图像。不知道为什么这不起作用。

【问题讨论】:

  • 什么实际上不起作用?我想我不明白确切的问题是什么。
  • 究竟什么时候调用 loadImage(Context context) 方法?游戏类构造函数?来自 PlayGame 的 gameLoopView 对象? playGame.type 是什么类型,int 还是 Integer?
  • @Joe loadImage 在表面视图的公共游戏(上下文上下文)中被调用。从 PlayGame 中的 onCreate 调用表面视图。 playGame 类型是 int。

标签: java android surfaceview


【解决方案1】:

如果 loadImages 是从 Game 构造函数中调用的,那么问题是当你膨胀视图时,你还没有定义 playGame.type。在调用 setContentView 之前尝试额外提取意图。

【讨论】:

  • @TedHopp Dang 我认为这会起作用,但它仍然给我带来了问题。不完全确定它是什么。不过还是谢谢。
  • 奇数。您已经验证从 PlayGame.onCreate 中的意图检索到的类型肯定是从 Main 传递的?如果是,那它肯定没有在游戏中出现? (我通常使用非法值作为 getIntExtra 的默认值,这样我就知道它是否被正确调用。)
  • @TedHopp 是的,它与 main 中传递的内容相同。它是在 setcontentview 之前提取的。只是当我尝试在表面视图中获取它时,它不会得到它。它强制关闭(我将在上面发布 logcat)
  • 强制关闭是由第 524 行 Game.loadImages 中的 NullPointerException 引起的。我不确切知道那是哪一行,但看看你的代码,在我看来最有可能的问题是调用 loadImages 时 playGame 尚未初始化。
  • @TedHopp 这很奇怪。我尝试在 Game 中创建一个变量,并且在调用 loadImages 之前尝试将其设置为零并将其设置为等于 playGame.type。 Stil 给了我一个空指针异常。顺便说一句,我如何让它显示行的数字。我会看看那条线是什么。
【解决方案2】:

我已经完成了你正在尝试的事情。我的解决方案是在内部类中设置所有视图,然后动态进行布局。这样每个小部件/视图都可以看到另一个在做什么。

【讨论】:

    【解决方案3】:

    PlayGame 类中将type 设置为public static,并在调用setContentView 之前额外调用intent,如Ted Hopp 所述。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-12
      • 1970-01-01
      • 2018-01-07
      • 1970-01-01
      • 1970-01-01
      • 2017-04-05
      相关资源
      最近更新 更多