我在Activity中有5个按钮,具有相对布局。我有一个叫做的函数 init(),它会使用 setX()和 setY()重新定位按钮。当我从onClickListener中调用 init()时,按钮会重新排列,没有任何问题。但是当我从 onCreate()或 onStart()调用该函数时,日志显示该函数已执行但按钮保持在相同位置。我该怎么办?
此外,如果我从 onResume()调用init(),按钮会重新定位而不会出现问题。
public class MainActivity extends ActionBarActivity {
@Override
protected void onStart()
{
super.onStart();
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//if init() is called here I can see the Log "Tag/Init Executed" but the buttons are not repositioned
}
@Override
protected void onResume()
{
Log.i("Log", "resume called");
super.onResume();
//if i call init() here, the button is not repositioned but if i click home button and resume the app again, the button is repositioned.
}
public void init()
{
Log.i("Tag","Init Executed");
b1=(ImageButton)findViewById(R.id.imageButton);
b1.setX(p.x);
b1.setY(p.y);
}
}
答案 0 :(得分:0)
<强>的onCreate():强>
首次创建活动时调用。这是您应该执行所有常规静态设置的地方:创建视图,将数据绑定到列表等。此方法还为您提供包含活动先前冻结状态的Bundle(如果有)。始终紧跟onStart()。
<强> onRestart():强>
在您的活动停止之后,再次启动之前调用。始终紧跟onStart()
<强>在onStart():强>
当活动对用户可见时调用。如果活动到达前台,则按onResume(),如果隐藏,则按onStop()。
Android activity life cycle - what are all these methods for?
答案 1 :(得分:0)
好的,很久以前我解决了这个问题。刚才有时间更新它。使用它后,它对我有用。
View myView=view.findViewById(R.id.parent);
myView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
init();
}