Reputation: 698
I'm not sure where the problem is. I thought if the activity would pass information to the surfaceview it implements. Basically I'm trying to make it so that when someone selects their choice of game layout from the main menu (passes it with Intent) it then goes to the PlayGame class. (I have it take the number given from the intent). That activity uses SurfaceView through a layout. Then down in the surface view where it calls the images and assigns them I tried using an if else to determine which pictures it should be using. Didn't work. Not exactly sure what to do about it. If there is a better way to make it use the images from a previous selection on the main page. Looks like this.
Main Class (Just one of the buttons passing in intent)
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);
}
Game Class:
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);
}
More images than just one, but to save space it's just the one. Any help would be appreciated. I'm sure I must have done something wrong there.
EDIT: Here is the log cat from the force close caused from this setup.
06-06 17:55:01.655: ERROR/AndroidRuntime(16229): FATAL EXCEPTION: main 06-06 17:55:01.655: ERROR/AndroidRuntime(16229): java.lang.RuntimeException: Unable to start activity ComponentInfo{fallacystudios.gnarlyned/fallacystudios.gnarlyned.PlayGame}: android.view.InflateException: Binary XML file line #7: Error inflating class fallacystudios.gnarlyned.GameLoopView 06-06 17:55:01.655: ERROR/AndroidRuntime(16229): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 06-06 17:55:01.655: ERROR/AndroidRuntime(16229): Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class fallacystudios.gnarlyned.GameLoopView 06-06 17:55:01.655: ERROR/AndroidRuntime(16229): Caused by: java.lang.reflect.InvocationTargetException 06-06 17:55:01.655: ERROR/AndroidRuntime(16229): Caused by: java.lang.NullPointerException
Then a whole bunch of heap size overflow
All this only happens when I have the if(gameType == 1) and else if(gameType == 2) in the loadImages section. Doing this to make it so only certain images are used when that map is selected. Not sure why that doesnt work.
Upvotes: 2
Views: 1746
Reputation:
set type
to public static
in PlayGame
Class and call intent extra before calling setContentView
as Ted Hopp mentioned.
Upvotes: 0
Reputation: 29
I've kind of done what you're attempting. My solution was to set all the views in inner classes and then do your layout dynamically. That way every widget/view can see what the other is doing.
Upvotes: 0
Reputation: 234795
If loadImages
is being called from the Game constructor, then the problem is that when you inflate the view, you haven't yet defined playGame.type. Try extracting the intent extra before calling setContentView
.
Upvotes: 1