Макет Android отображается только после завершения метода oncreate

Я создал (как я думал) простую карточную игру JAVA. В JAVA игра загружает макет (фрейм) и отображает кнопки ImageButton, состоящие из квадратного изображения картхолдера для каждого игрока. Затем держатели карт заполняются случайными картами из колоды одна за другой.

Итак, в моем методе onCreate в Android мой первоначальный макет состоит из карт с изображением держателя карты, а затем я запускаю метод в методе onCreate для раздачи карт. У меня проблема в том, что первоначальный макет вообще не отображается. Появляется окончательный макет с уже заполненными держателями карт. Программа даже не показывает их, поскольку они раздаются по отдельности. Я подумал, что, возможно, мне нужно запустить AsyncTask, но у меня действительно нет никаких «основных» инструкций в моем методе сделки, которые, казалось бы, требуют этого.

Я относительно новичок в разработке Android, и я думаю, мне интересно, если что-то настолько простое собирается повесить мой оригинальный макет, куда идут основные инструкции приложения, если не в методах, вызываемых из метода onCreate? Почему это не так просто, как просто отобразить мой исходный макет, а затем продолжить поток пользовательского интерфейса с обновлением карточек одну за другой?

ОБНОВИТЬ:

К сожалению, это все еще не работает. Мой onCreate выглядит так:

public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            player1Card1B = (ImageButton) findViewById(R.id.p1C1Bref);
            player1Card2B = (ImageButton) findViewById(R.id.p1C2Bref);
            player1Card3B = (ImageButton) findViewById(R.id.p1C3Bref);
            player2Card1B = (ImageButton) findViewById(R.id.p2C1Bref);
            player2Card2B = (ImageButton) findViewById(R.id.p2C2Bref);
            player2Card3B = (ImageButton) findViewById(R.id.p2C3Bref);
            player3Card1B = (ImageButton) findViewById(R.id.p3C1Bref);
            player3Card2B = (ImageButton) findViewById(R.id.p3C2Bref);
            player3Card3B = (ImageButton) findViewById(R.id.p3C3Bref);
            player4Card1B = (ImageButton) findViewById(R.id.p4C1Bref);
            player4Card2B = (ImageButton) findViewById(R.id.p4C2Bref);
            player4Card3B = (ImageButton) findViewById(R.id.p4C3Bref);

            newDeckCard = (ImageButton) findViewById(R.id.newCardDeckBref);
            discardDeckCard = (ImageButton) findViewById(R.id.discardCardDeckBref);
            knockButton = (ImageButton) findViewById(R.id.knockBref);

            player1Card1B.setOnClickListener(this);
            player1Card2B.setOnClickListener(this);        
            player1Card3B.setOnClickListener(this);
            newDeckCard.setOnClickListener(this);
            discardDeckCard.setOnClickListener(this);
            knockButton.setOnClickListener(this);
    }

and my onStart like this:

     @Override
    protected void onStart() {
        // TODO Auto-generated method stub
        super.onStart();


        shuffle();
        deal();
    }

Я просто получаю белый экран с надписью «Основной», а затем, в конце концов, карты отображаются уже заполненными. Я даже не получаю заполнители, которые читаются в методе onCreate. Когда я удаляю метод Deal(), появляются карточки-заполнители. Когда я кладу его обратно, карты-заполнители не отображаются, а отображаются только сданные карты.


person SteelersFan    schedule 06.08.2012    source источник


Ответы (1)


Вы должны переместить код, который заполняет карточки, в метод onResume() вашей активности — возможно, это своего рода AsyncTask, запущенный onResume(), который выполняет работу с течением времени, чтобы пользователь мог визуально видеть изменения.

Метод onResume() вызывается, когда Android фактически отображает вашу активность на экране; если вы сделаете все в onCreate(), вся работа будет завершена до того, как ваше приложение появится на экране, что дает результаты, которые вы видите.

У Google есть хорошая онлайн-документация о том, как работает жизненный цикл активности.

person mportuesisf    schedule 06.08.2012
comment
Я думаю, что onStart() может быть лучшим выбором, так как onResume() также вызывается, когда ваше приложение возвращается на передний план ... вы, вероятно, не хотите переделывать в этом случае. - person CSmith; 07.08.2012