还原自定义视图

时间:2014-06-19 03:34:38

标签: java android android-custom-view

我正在开发一个利用自定义视图的应用程序MainView.java,它扩展了View,通过使用onClick上的MainActivity设置视图:

        public void onClick(View view) {
           if(view.getId() == R.id.button){
               MainView = new MainView(this);
               setContentView(MainView);
               MainView.setBackgroundColor(Color.BLACK);
           }
        }

MainView运行游戏,如果玩家“输了”,我希望屏幕返回显示初始activity_main.xml或任何其他合适的View。我在MainView的update()方法中检测到了丢失。

    private void update() {
    if(lives == 0){
        reset();
    }
    if(score >= lvlScore){
        levelUp();
    }
    for(Projectile proj: balls) {//set positions good balls
        proj.setPosition();
    }
    for(Projectile proj: badBalls){//set positions bad balls
        proj.setPosition();
    }

我一直无法弄清楚要做的是从我的Activity中的MainView中检索信息,比如得分,以及如何根据MainView中发生的事情将我的自定义视图恢复为初始XML。

2 个答案:

答案 0 :(得分:0)

只需为您的MainView提供您的活动参考。

在主视图中......

public void setParentActivity(final Activity activity){
  this.mActivity = activity;
}

点击

    public void onClick(View view) {
       if(view.getId() == R.id.button){
           MainView = new MainView(this);
           setContentView(MainView);
           MainView.setBackgroundColor(Color.BLACK);
           MainView.setParentActivity(this);
       }
    }

答案 1 :(得分:0)

使用界面与Activity进行通信,就像点击侦听器一样。例如,在MainView班级中:

// Keep a reference to a listener that should be notified of events
private GameEventListener mListener;

// An interface defining events that a listener will receive
public interface GameEventListener {
    void onWin();
    void onLoss();
}

public void setGameEventListener(GameEventListener listener) {
    mListener = listener;
}

private void notifyGameWon() {
    if (mListener != null) {
        mListener.onWin();
    }
}

private void notifyGameLost() {
    if (mListener != null) {
        mListener.onLoss();
    }
}

然后,在您的活动中:

// Have your Activity implement the GameEventListener interface
public class MyActivity extends Activity implements GameEventListener {
    public void onClick(View view) {
        if (R.id.button = view.getId()) {
            MainView mainView = new MainView(this);
            mainView.setBackgroundColor(Color.BLACK);

            // Since your Activity implements this interface, you can just
            // set `this` as the listener. Whenever your MainView class
            // calls one of the notify() methods, the implementations below
            // will be triggered.
            mainView.setGameListener(this);
            setContentView(mainView);
        }
    }

    @Override public void onWin() {
        // Reset your view here
    }

    @Override public void onLoss() {
        // Reset your view here
    }
}