我正在开发一个利用自定义视图的应用程序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。
答案 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
}
}