从活动X开始,当某个事件发生时,活动A被启动(是一个进度条),并且此活动A启动一个AsyncTask,当完成时,关闭活动A并返回活动X.此事件不能在很多不同的活动中执行,AsyncTask执行的代码可以不同(通常必须从Activity X访问很多变量)。
所以我想只有一个Activity A,但是让它在AsyncTask中执行不同的代码片段。这里的问题是我无法使用自定义构造函数构造活动A(例如传递将在AsyncTask中执行的runnable)。
我试图将活动X中的代码作为Parcelable传递,但每次我想调用活动A时,它都会强迫我编写大量无用且重复的Parcelable相关代码。
这有什么诀窍吗?我没有使用Java 8,所以lambdas不是一个选项。
提前谢谢。
答案 0 :(得分: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中,调用对话框
Dialog d = new Dialog(this, R.style.myCustomDialog);
d.setContentView(R.layout.your_dialog);
d.show();
AsyncTask task.execute(); //Execute your task
当任务结束时,不要忘记关闭对话框,或者设计布局,让用户控制(如果可能)完成任务以取消它,并在需要时关闭对话框。
希望它有所帮助。