2015-06-25 3 views
0

У меня есть 5 кнопок в Управлении с относительной компоновкой. У меня есть функция, называемая init(), которая будет перемещать кнопки с помощью setX() и setY(). Когда я вызываю init() изнутри onClickListener, кнопки перестраиваются без каких-либо проблем. Но когда я вызываю функцию от onCreate() или onStart(), журнал показывает, что функция выполнена, но кнопки остаются в том же положении. Что мне делать?Невозможно переместить представления программно в Activity android

Также, если я вызываю init() от onResume(), кнопки перемещаются без проблем.

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

обеспечивают некоторый код .... Я думаю, что ваши делать это перед зрением иерархии полностью inflatet –

+0

я второй, что, но в 'OnStart()' зрения иерархия должна была завышена, немного кода поможет – trpride

ответ

0

Хорошо, я решил это, очень давно. Только что успел обновить его. Это сработало для меня после использования.

View myView=view.findViewById(R.id.parent); 
myView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
     init(); 
    } 
0

OnCreate():

Вызывается, когда активность создается впервые. Здесь вы должны выполнить всю свою обычную статическую настройку: создавать представления, привязывать данные к спискам и т. Д. Этот метод также предоставляет вам пакет, содержащий ранее замороженное состояние активности, если оно есть. Всегда за ним следует onStart().

onRestart():

Вызывается после того, как ваша деятельность была остановлена, до того он начал снова. Всегда следует OnStart()

OnStart():

Вызывается, когда активность становится видимым для пользователя. За ним следует onResume(), если действие выходит на передний план или onStop(), если оно становится скрытым.

Android activity life cycle - what are all these methods for?

Смежные вопросы