2016-06-04 4 views
2

Начиная с Activity X, когда происходит какое-либо событие, запускается Activity A (это индикатор выполнения), и это действие A запускает AsyncTask, который по завершении закрывает действие A и возвращается к Activity X. Это событие не может выполняться во множестве разных действий, а код, выполняемый AsyncTask, может быть другим (и обычно должен иметь доступ к большому количеству переменных из Activity X).Запуск родовой активности и ожидание завершения работы AsyncTask

Итак, я хочу иметь только одно действие A, но заставляю его выполнять разные фрагменты кода внутри AsyncTask. Проблема здесь в том, что я не могу построить Activity A с пользовательским конструктором (например, прогон, который будет выполняться в AsyncTask).

Я попытался передать код, как Parcelable от активности X, но это заставляет меня писать много бесполезного и повторил Parcelable связанного кода каждый раз, когда я хочу назвать свою деятельность A.

Есть любой трюк для этого? Я не использую Java 8, поэтому lambdas - это не вариант.

Заранее спасибо.

ответ

2

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

Например:

your_dialog.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/myProgressDialog" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@color/white_trans" 
android:gravity="center"> 

<ProgressBar 
    android:id="@+id/progressBar" 
    style="?android:attr/progressBarStyle" 
    android:layout_width="36dp" 
    android:layout_height="36dp" 
    android:indeterminate="true" /> 

Используйте пользовательский стиль для вашего диалога, если требуется добавить в styles.xml что-то вроде

<style name="myCustomDialog" parent="Theme.AppCompat.Light.Dialog"> 
    <item name="android:layout_width">match_parent</item> 
    <item name="android:layout_height">match_parent</item> 
    <item name="android:windowBackground">@color/my_color</item> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowIsFloating">false</item> 
</style> 

Тогда, в вашей операции X, вызовите диалог

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

Надеюсь, это поможет.

+0

Спасибо, помощник! Я застрял, заставляя меня показывать progressBar внутри Activity. Это решает мои две проблемы: мне не нужно новое действие каждый раз, когда я хочу показать этот ProgressBar, и я могу написать код, выполняемый AsyncTask внутри Activity X. – Turin

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