关闭视图类并打开另一个视图类

时间:2018-04-03 23:29:08

标签: java android

我从我的活动中调用了一个视图类。然后视图类调用相同的活动。这是问题,一旦活动恢复,它将不再注册按钮推送。(我正在尝试调用另一个视图类。这是一些代码:

查看课程

public class AnimationView extends View {

    Activity myActivity;
    //...
    public AnimationView(Context context, Activity activity) {
    super(context);
    //...
    }
@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    //...
    myActivity.setContentView(R.layout.activity_home);
    }
}

家庭活动

public class HomeActivity extends AppCompatActivity {
private AnimationView mDrawViewA;
///...
protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);
    mDrawViewA = new AnimationView(this,this);
    start = (Button) findViewById(R.id.startButton);
    //...
    start.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        //...
        setContentView(mDrawViewA);
        //calls more views 
        //......
    });
}

我现在意识到也许我应该在不同的活动中调用视图类,但我非常希望让所有视图类在同一个活动中运行。

1 个答案:

答案 0 :(得分:0)

问题是,每按一次“开始”按钮,您就会调用setContentView。此方法将使用您正在设置的新值覆盖当前布局(如果有)。

您可以做些什么来获得您期望的结果,根据我的理解,在每次点击按钮时为您当前的布局添加新的AnimationView,您可以尝试这样的事情:< / p>

start.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        AnimationView animationView = new AnimationView(getApplicationContext());

        // I'm using ConstraintLayout as an example, since I don't know exactly what layout you're using
        ConstraintLayout.LayoutParams params = new ConstraintLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT);
        // Set the layout params the way you want

        addContentView(animationView, params); // This is where the magic happens
    }
});

简而言之,addContentView是您想要在活动的根布局中添加新视图时应使用的方法。

PS:让观点“知道”控制它的活动是一种非常糟糕的做法。它始终是相反的方式:活动/片段知道它控制的视图。