现在我有了扩展 Activity 类的 MainActivity.java。
package com.divergent.tapdown1;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View PlayScreen = new PlayScreen(this);
setContentView(PlayScreen);
PlayScreen.setBackgroundColor(Color.BLACK);
}
}
这将打开扩展 View 的 PlayScreen。 我希望能够在发生特定事件时打开从 PlayScreen 创建的新 LoseScreen。问题是 setContentView() 显然是 Activity 类的一部分。我该如何解决这个问题?
谢谢!
编辑:
if (playerBounds.bottom > rowBlock.top && playerBounds.top < rowBlock.bottom && (playerBounds.left < blockX1[row] || playerBounds.right > blockX2[row])) {
ViewGroup parent = (ViewGroup) getParent();
finalScore = score;
parent.addView(new PauseScreen(getContext()));
parent.bringToFront();
parent.setBackgroundResource(R.drawable.pausebackground);
}
最佳答案
您可以采取多种方法:
您可以创建一个容器 View (例如
FrameLayout
),将其用作 Root View ,并向其中添加 LoseScreen 并从中删除 PlayScreen。如果其他代码需要添加/删除 View ,您可以传递对容器的引用。View playScreen = new PlayScreen(this); View container = new FrameLayout(this); playScreen.setRootView(container); container.addView(playScreen); setContentView(container);
您可以将对
MainActivity
的引用传递给创建 LoseScreen 的类。由于setContentView
是一个公共(public)方法,因此您只需调用setContentView
即可,例如:Activity mainActivity = this; playScreen.setMainActivity(mainActivity);
然后从
PlayScreen
中:mainActivity.setContentView(new LoseScreen(getContext()));
在
PlayScreen
中,您可以使用getParent()
获取父 View ,然后与第一种方法类似,向其添加 LoseScreen 并删除播放屏幕。ViewGroup parent = (ViewGroup)getParent(); parent.addView(new LoseScreen(getContext())); parent.removeView(this);
关于Java - 从单独的类打开一个新 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24027642/