Android: загрузка данных и уведомление об активности? Также задокументирован неудачный подход! - PullRequest
2 голосов
/ 09 октября 2009

Я только что попробовал глупый подход, и он разбил мое приложение ... В основном у меня есть действие, которое имеет три вкладки (содержащие три действия). Каждая вкладка получает свои данные из XML-файла, загруженного из сети. Все хорошо, но когда я запускаю свое приложение, оно загружает XML-файл, и для этого есть время ожидания.

Мне удалось обойти это, добавив заставку. Это выглядит красиво, но проблема в том, что когда я нажимаю на вторую вкладку, ему все равно нужно вытащить список из сети, так что теперь он выглядит ужасно ... Он ждет, прежде чем отобразить список. Поэтому я разработал AsyncTask, который просто загружает XML-файл. В своей основной деятельности я изначально порождаю две задачи и отправляю URL и Intent в качестве параметров. А внутри деятельности, которая начинается внутри вкладок, я использую wait (). Внутри AsyncTask после завершения загрузки я уведомляю Intent с помощью notify (). Это разбилось! Конечно, я не ожидал, что это сработает, но просто хотел попробовать :) Писать так, чтобы я мог либо получить обратную связь о том, почему это не удалось, либо не дать другим тратить свое время на это ...

Теперь я уверен, что многие сталкиваются с проблемой времени ожидания внутри вкладок. Как мне это решить? Я имею в виду либо затемнение экрана, а затем отображение серии тостов, либо отображение индикатора прогресса на вкладках, либо предварительную выборку XML-файлов ... Я понятия не имею, как этого можно достичь ... Любой мысли?

Ответы [ 2 ]

2 голосов
/ 09 октября 2009

Кредит: Марка. Спасибо!

Проблема: отображение индикатора выполнения, когда ваше приложение занято выполнением некоторой работы

Подход:

public class Approach extends ListActivity {

    ProgressDialog myProgressDialog = null; 
    ListView myList = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        myList = getListView();

        myProgressDialog = ProgressDialog.show(getParent(),       
                "Please wait...", "Doing extreme calculations...", true); 
        //Do some calculations
            myProgressDialog.dismiss();

    }
}

Есть несколько проблем (например, обновление некоторых элементов пользовательского интерфейса). Вы могли бы хотеть порождать другую нить, чтобы сделать ваши вычисления при необходимости.

Кроме того, если вас это интересует, вас может заинтересовать подход Мэтта: android-показывая-неопределенный-прогресс-бар-в-табе-активности

1 голос
/ 09 октября 2009

ProgressDialog.

Или установите для вкладок значение android:visibility="gone" до тех пор, пока данные не будут готовы, а затем сделайте их visible. Тем временем покажите какой-нибудь график загрузки (возможно, с применением RotateAnimation).

...