2014-10-16 4 views
0

Мне нужно обновить некоторые приложения. Он уже используется, поэтому я не хочу делать большие изменения ...Как добавить progressDialog или spinner в уже готовое приложение?

Я хочу добавить диалог прогресса или счетчик каждый раз при загрузке новой активности. Я прочитал некоторые статьи и вопросы здесь, как будто я должен использовать AsyncTask и так далее. Но я хочу знать, есть ли более простой способ. Возможно, что-то вроде создания некоторой функции, которая покажет spinner/progressDailog, пока не будет загружен новый макет.

Если вы знаете, что я хочу, вы можете мне сказать, если это возможно? Спасибо

EDIT: У меня есть одна идея. Могу ли я создать макет с помощью счетчика, который будет перекрывать текущий макет? Если да, то как?

EDIT два: AsyncTask

private ProgressDialog progressDialog; 
    @Override 
    protected void onPreExecute(){ 
     progressDialog = new ProgressDialog(mContext); 
     progressDialog.setMessage("Loading..."); 
     progressDialog.setCancelable(false); 
     progressDialog.setIndeterminate(true); 
     progressDialog.show(); 
    } 

    // Some code here 

@Override 
    protected void onPostExecute(CustomAsyncTaskResult<User> result) { 
     progressDialog.dismiss(); 
     ((LoginActivity)mContext).getResult(result); 
    } 

ответ

0

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

+0

Хорошо, я использовал asynctask, отобразился диалог выполнения, затем исчез, но новый макет был отображен после 5 секунд. Что мне делать? Код указан в вопросе. – kristyna

+0

@ user3808179 Причиной этого является то, что вы должны выполнить инициализацию в методе doInBackground. В настоящее время ваша асинтеза не делает ничего асинхронно. Вы не можете уйти без серьезного рефакторинга - вам нужно изменить способ инициализации деятельности, а именно большую часть инициализации в асинтете. –

+0

Извините за неправильное толкование ... Существует метод 'doInBackgroud()'. Но из метода есть и некоторый код. Это причина, по которой скоро появится диалоги прогресса? – kristyna

0

Причина использования AsyncTask заключается в том, что ProgressBar в противном случае будет отображаться с использованием потока пользовательского интерфейса, который вы не хотите делать, поскольку он блокирует другие операции, которые должен выполнять поток пользовательского интерфейса. Вам необходимо делегировать отображение ProgressBar в фоновый поток. Так что нет, вы не можете этого сделать.