Java - 从单独的类打开一个新 View

标签 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 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/

相关文章:

R 需要重新启动 RStudio 以使用 dev.copy() 和 dev.off() 查看并保存在文件中

Android: 如何在 GridView 中显示菜单项(通常显示在 ListView 中)?

ios - Scrollview 只是显示我在 swift 3 中使用 Storyboard 创建的 View 中最后一个数组的元素?

java - 使用 Java API 导入 Alloy 模块

java - 对于 Android,我应该在我的游戏中更频繁地使用 float 数据类型,还是在绘图时转换为 float ?

java - SaxonParserTest 缺少 SaxonXQDataSource?

android - 从 HttpResponse 中提取消息正文

java - "this"在例如 Intent(this, ClassName.class) 中使用时如何实际提供来自 Activity 的上下文

java - 在哪里嵌套操作 ArrayLists 的方法

java - 带有嵌套谷歌地图 fragment 的 fragment 中后按 NullPointerException