icecream
icecream

Reputation: 155

.Override method of different class

Calling onBackPressed method of Activity class on a View Class? is it possible? and so how can I? thanks for help

UPDATE: I just created the GameView of my Game which is extends to View Class. I create a variable that increments whenever I finish every level so it will limit a levels per game. And so I want to implement a onBackPressed method which I can set the incrementing variable back to zero whenever the player press the back key.

FULL CODE: MAIN ACTIVITY

public class MainActivity extends Activity {    
private GameView mGameView;
@Override
public void onBackPressed() {
    if (mGameView.interceptBackPressed()) {
        return;
    }
    // TODO Auto-generated method stub
    super.onBackPressed();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.splash);
    mGameView = (GameView) findViewById(GameView.countmaze);

Afterwards it goes to Menu Class

public class menu extends Activity implements OnClickListener {
static int nextmaze;
int countmaze = 0;
GameView gameView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Button btnplay = (Button) findViewById(R.id.btnPlay);
    btnplay.setOnClickListener(this);
}
@Override
public void onBackPressed() {
    //I have here an AlertDialog builder
}
@Override
public void onClick(View v) {
    case R.id.btnPlay:
        Toast.makeText(getApplicationContext(), "LEVEL 1",
                Toast.LENGTH_SHORT).show();
        startnextmaze();

    }
}
void startnextmaze() {
    Random rand = new Random();
    Intent game = new Intent(menu.this, Game.class);
    nextmaze = rand.nextInt(5) + 1;
    Maze maze = MazeCreator.getMaze(nextmaze);
    game.putExtra("maze", maze);
    startActivity(game);
}

Then on my GameView Class

public class GameView extends View {
static int countmaze;

//Big codes here......

public boolean interceptBackPressed() {
    // TODO Auto-generated method stub
    countmaze = 0;
    return true;
}
}

Upvotes: 1

Views: 1894

Answers (2)

Damian Petla
Damian Petla

Reputation: 9103

Update your code with the following changes:

Activity

public class MyActivity extends Activity {
    private GameView mGameView;

    @Override
    public void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        setContentView(R.layout.main);
        //View reference to object defined in XML
        mGameView = (GameView) findViewById(R.id.gameview);//id must be specified in XML
        //I assumed that GameView is a part of your XML layout

        //View created programmatically.
        mGameView = new GameView(this);

       //Use one of the above initialisation techniques of mGameView.
    }

    @Override
    public void onBackPressed() {
        //here we are calling method on mGameView which cannot be null
        //that's why we initialised it in onCreate() method
        if (mGameView.interceptBackPressed()) {
            return;
        }
        super.onBackPressed();//finish your Activity
    }
}

GameView

public class GameView extends View {

    public boolean interceptBackPressed() {
        //TODO handle your game logic here and return true if you don't
        //want your game to be shutdown, otherwise return false
        return true;
    }

}

Upvotes: 1

Itzik Samara
Itzik Samara

Reputation: 2288

Create a callback on the Activity onBackPressed that the View class will implement

Example

public void interface onBackPressedHandler {

   public void onBackPressed();
}

Activity Class

public onBackPressedHandler mHandler;


@Override 
public void onCreate(....) {

   GameView game... //Inflate or create.
   game.setActivity(this);

}

public void setListener(onBackPressedHandler handler) {
    mHandler = handler;
}

@Override
public voind onBackPressed() {

  if(mHandler != null) {
       mHandler.onBackPressed();
  }
  super.onBackPressed();

View Class

public GameView extends View implements onBackPressedHandler {

public void setActivity(Activity activity) {
     activity.setListener(this);
}    


public void onBackPressed() {
  //your code here.
    }
}

This example shows when you press the back Button it will call the onBackPress on the View.

Hope it Helps.

Upvotes: 3

Related Questions