Java-从单独的类打开新视图

Java-从单独的类打开新视图,java,android,view,android-activity,Java,Android,View,Android Activity,现在我有了扩展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 o

现在我有了扩展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);
}
}
这将打开扩展视图的PlayScreen。 当某个事件发生时,我希望能够打开从PlayScreen创建的新LoseScreen。问题在于setContentView()显然是Activity类的一部分。我怎样才能避开这件事

谢谢

编辑:

if(playerBounds.bottom>rowBlock.top&&playerBounds.topblockX2[row])){
ViewGroup parent=(ViewGroup)getParent();
最终得分=分数;
addView(新的PauseScreen(getContext());
parent.bringToFront();
父.setBackgroundResource(R.drawable.pausebackground);
}

您可以采取以下几种方法:

  • 您可以创建一个容器视图(例如,
    FrameLayout
    ),将其用作根视图,并向其中添加LoseScreen,然后从中删除PlayScreen。如果其他代码需要添加/删除视图,则可以传递对容器的引用

    View playScreen = new PlayScreen(this);
    View container = new FrameLayout(this);
    
    playScreen.setRootView(container);
    
    container.addView(playScreen);
    setContentView(container);
    

  • 您可以将对
    MainActivity
    的引用传递给创建屏幕的类。由于
    setContentView
    是一个公共方法,因此您可以在其上调用
    setContentView
    ,例如:

    Activity mainActivity = this;
    playScreen.setMainActivity(mainActivity);
    
    然后从
    播放屏幕中:

    mainActivity.setContentView(new LoseScreen(getContext()));
    

  • PlayScreen
    中,您可以使用
    getParent()
    获得父视图,然后,与第一种方法类似,将LoseScreen添加到其中并移除PlayScreen

    ViewGroup parent = (ViewGroup)getParent();
    parent.addView(new LoseScreen(getContext()));
    parent.removeView(this);
    

为什么不使用xml并更新其视图。谢谢:D这很有效,如果我想说,在我的游戏屏幕上再画一个屏幕,这样我的游戏仍在显示(例如暂停屏幕),我该怎么做?创建另一个不填充屏幕的视图,例如宽度/高度设置为特定值或包装内容,使用AddView添加它我可以创建视图,但它不会在我的游戏视图上绘制我的半透明背景。如果视图被其他内容覆盖,请尝试在其上调用bringToFront。如果您想要半透明背景,请尝试使用8位argb值作为背景色,例如#80ff0000表示50%的透明红色。如果问题是它填满了整个屏幕,请尝试减小宽度/高度。我尝试调用bringToFront函数,但没有解决它。我已经更新了我的代码,以显示我在哪里尝试这样做。
ViewGroup parent = (ViewGroup)getParent();
parent.addView(new LoseScreen(getContext()));
parent.removeView(this);