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

时间:2014-06-04 01:33:44

标签: java android view android-activity

现在我的MainActivity.java扩展了Activity类。

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);

        }

1 个答案:

答案 0 :(得分:1)

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

  • 您可以创建容器视图(例如FrameLayout),将其用作根视图,并将LoseScreen添加到其中并从中删除PlayScreen。如果某些其他代码需要添加/删除视图,则可以将引用传递给容器。

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


  • 您可以将对MainActivity的引用传递给创建LoseScreen的类。由于setContentView是一种公开方法,因此您只需在其上调用setContentView,例如:

    Activity mainActivity = this;
    playScreen.setMainActivity(mainActivity);
    

    然后从PlayScreen

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


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

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