将数据从Activity传递到SurfaceView

时间:2011-06-05 02:57:00

标签: java android surfaceview

我不确定问题出在哪里。我想如果活动将信息传递给它实现的surfaceview。基本上我正在尝试这样做,以便当有人从主菜单中选择他们选择的游戏布局(用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 Class

 @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:ERROR / AndroidRuntime(16229):致命异常:主要 06-06 17:55:01.655:ERROR / 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:ERROR / AndroidRuntime(16229):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 06-06 17:55:01.655:ERROR / AndroidRuntime(16229):引起:android.view.InflateException:二进制XML文件行#7:错误膨胀类fallacystudios.gnarlyned.GameLoopView 06-06 17:55:01.655:ERROR / AndroidRuntime(16229):引起:java.lang.reflect.InvocationTargetException 06-06 17:55:01.655:ERROR / AndroidRuntime(16229):引起:java.lang.NullPointerException

然后一大堆堆大小溢出

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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