我从我的活动中调用了一个视图类。然后视图类调用相同的活动。这是问题,一旦活动恢复,它将不再注册按钮推送。(我正在尝试调用另一个视图类。这是一些代码:
查看课程
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
//......
});
}
我现在意识到也许我应该在不同的活动中调用视图类,但我非常希望让所有视图类在同一个活动中运行。
答案 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:让观点“知道”控制它的活动是一种非常糟糕的做法。它始终是相反的方式:活动/片段知道它控制的视图。