`

TabActivity下在AsyncTask中使用ProgressDialog存在问题的解决方法

 
阅读更多

Android提供了两种主要的异步操作方法:

第一种就是采用Thread执行内容,然后通过handler来获知线程结果以更新UI,但是这种方式对线程的安全性需要程序员来进行控制;

第二种是采用AsyncTask,这种方式是线程安全的,当然也意味着效率会比第一种稍低,不过还是可以接受的。

但是在TabActivity中用AsyncTask方法进行异步操作的时候,如果在超过两层的activity中使用了ProgressDialog,就会存在问题。这个大概是Android本身的bug,或者不叫bug,而是一种限制。对于这种情况,目前没有什么很好的正规解决方案,不过在大部分情况下可以采用如下workaround来解决。

01.publicclassMyActivityextendsActivity {
02.
03.protectedvoidonCreate(Bundle savedInstanceState) {
04.// TODO Auto-generated method stub
05.super.onCreate(savedInstanceState);
06.
07.//判断是否存在父Activity
08.Context c;
09.if(getParent() !=null) c = getParent();
10.elsec =this;
11.AsyncClass async =newAsyncClass (c);
12.async.execute();
13.}
14.
15.@Override
16.protectedvoidonResume() {
17.// TODO Auto-generated method stub
18.super.onResume();
19.}
20.
21.classAsyncClassextendsAsyncTask {
22.privateContext context;
23.privateProgressDialog progressDlg;
24.
25.publicAsyncLoadData(Context c) {
26.this.context = c;
27.}
28.
29.@Override
30.protectedString doInBackground(Void... params) {
31.// TODO Auto-generated method stub
32.fillData();
33.returnnull;
34.}
35.
36.protectedvoidonPostExecute(String result) {
37.//Do some work
38.progressDlg.cancel();
39.}
40.
41.protectedvoidonPreExecute() {
42.progressDlg =newProgressDialog(context);
43.progressDlg.setMessage("ing...");
44.progressDlg.setCancelable(false);
45.progressDlg.show();
46.}
47.}
48.
49.}

主要思路很简单,就是由于是超过两层的Activity中会出问题,所以就使用父级的Context,这样就能workaround了。

分享到:
评论

相关推荐

    切换卡TabActivity的使用

    本篇将详细讲解如何在Android应用中使用TabActivity进行切换卡的实现。 首先,TabActivity是Android早期版本中的一个组件,它允许在一个Activity中包含多个Tab,每个Tab对应一个单独的Activity。然而,随着Android ...

    使用 TabActivity 实现滑动翻页(带动画)和标签置底

    在Android开发中,`TabActivity`是早期版本中用于实现标签栏切换的一种方式,它可以创建一个带有多个选项卡的活动,每个选项卡对应一个单独的`Activity`或`Fragment`。然而,`TabActivity`在Android API Level 13...

    TabActivity的使用

    - 对于API版本较低的应用,可能仍需使用`TabActivity`,但需要注意兼容性问题,并尽量避免在新项目中使用。 - 考虑使用`Fragment`来替代`Activity`,因为它们提供了更好的复用性和管理多个视图的能力。 5. **文件...

    TabActivity中的Tab标签详细设置

    8. **版本兼容性**:由于TabActivity在新版本的Android SDK中已被弃用,因此在现代应用开发中,开发者通常会选择使用FragmentTabHost结合Fragment实现类似功能,以保证更好的API兼容性和更好的性能。 9. **替换方案...

    TabActivity使用释列

    如果你正在学习或使用这个项目,通过阅读代码和理解上述的TabActivity使用方法,你应该能够更好地理解如何在实际项目中运用TabActivity。 总结一下,虽然TabActivity已不再推荐使用,但在特定情况下,它仍能提供一...

    TabActivity 分页 使用

    本文将详细讲解如何在Android应用中使用TabActivity实现分页功能,并结合源码分析其工作原理。 首先,让我们了解TabHost和TabWidget这两个关键组件。TabHost是整个Tab界面的容器,它包含一个TabWidget(用于显示...

    TabActivity笔记

    在`TabActivity`的场景下,我们需要在这个文件中声明`TabActivity`以及被包含的各个子`Activity`,并设置相应的启动模式,以确保正确地导航和管理这些活动。 `src`目录包含了应用的源代码。在`TabActivity`的实现中...

    android 如何在tabactivity中嵌套tab

    在onCreate()方法中,使用TabHost的setup()方法初始化TabHost,并添加Tab。 - **嵌套TabActivity** 要在某个Tab中嵌套另一个TabActivity,我们需要在对应的Tab内容中启动新的TabActivity。这通常通过Intent完成,...

    TabActivity之间跳转、传值

    2. **创建Tab**:要创建一个`TabActivity`,首先需要在布局文件中设置`TabHost`和`TabWidget`,然后在代码中通过`TabHost.setup()`方法初始化`TabHost`。接着,使用`TabHost.addTab()`方法为每个标签添加内容,指定...

    TabActivity使用实例

    在`TabActivity`的实现中,通常会使用`TabHost`和`TabSpec`来创建和设置标签。`TabHost`是一个容器,用于显示和管理多个`TabSpec`。`TabSpec`则是每个标签的配置,包括标签的文本、图标以及对应的`Intent`,这个`...

    TabActivity

    在Android开发中,`TabActivity`是早期用来创建带有选项卡式导航的应用界面的一个关键组件。这个组件允许用户通过在不同的Tab之间切换来浏览多个视图或者内容区域。`TabActivity`结合了`TabHost`和`TabWidget`,使得...

    用Fragment模拟TabActivity

    然后,在`TabLayout`中使用这个自定义布局。 3. 在`TabSelectedListener`中,你可以监听到标签被选中和未选中的事件。在这些事件中,可以改变动画元素的状态,实现切换效果。 ```java tabLayout....

    Fragment + TabActivity实现标签内跳转

    在TabActivity中使用Fragment,可以创建更灵活、可定制的用户界面,每个Tab下的内容都可以由一个独立的Fragment来承载。 TabActivity在早期的Android版本中被广泛使用,它提供了一个容器来显示多个Tab,每个Tab通常...

    ActivityGroup 代替TabActivity的用法

    相比之下,TabActivity 存在一些不足之处,例如,它自己的视图几乎没人使用(也就是难看的标签页按钮形式),国内开发者用到的特性几乎都是从 ActivityGroup 继承下来的。此外,TabActivity 还存在强制依赖关系,它...

    Android学习4——ListActivity,TabActivity

    然而,随着Android设计指南的更新,现在推荐使用FragmentTabHost或ViewPager配合Fragment来实现类似功能,因为TabActivity已经过时,不推荐在新项目中使用。 1. **创建TabActivity**:创建一个TabActivity类,然后...

    TabActivity 实现滑动翻页源码

    在Android开发中,`TabActivity`是用于创建带有选项卡导航的应用程序的一种方式。它允许用户通过滑动或点击选项卡在多个视图之间切换,提供了丰富的用户体验。本篇文章将详细解析如何使用`TabActivity`实现滑动翻页...

    使用TabActivity简单实现TabHost显示

    在早期的Android版本中,TabActivity被广泛使用来实现这一功能,但现在已被废弃,推荐使用Fragment和ViewPager来代替。然而,为了理解这个老式的方法,我们将深入探讨如何使用TabActivity简单实现TabHost显示。 ...

    TabActivity跳转

    然而,在实际开发中,我们可能会遇到一个问题:如何在`TabActivity`的子页面中不通过底部导航栏而是通过其他方式(如按钮点击)跳转到另一个完全不同的页面。这个问题涉及到Android的Activity栈管理、Intent的使用...

Global site tag (gtag.js) - Google Analytics