使用ActivityGroup时,在Activity中显示对话框出现的问题
来源:互联网 发布:手机壳淘宝店铺名字 编辑:程序博客网 时间:2024/05/22 02:00
今天终于解决了ProgressDialog显示的问题。吃过中午饭,整理一下。
上图是在做项目的一个界面,在点击一个tab -->“书目检索”之后就会显示。我做了一个进度条,当点击搜索button的时候,会显示一个ProgressDiaog。问题就出在显示不出来,错误信息大概是这样子的:unable to add window...is your activity running?
以上界面其实由四个Activity组成,父Activity继承了ActivityGroup,其他三个为子Activity。代码如下:
public class SearchActivity extends ActivityGroup {private TabHost stabHost;private final String FASTSEARCH=" 快速检索 ";private final String ADVANCEDSEARCH=" 高级检索 ";private final String CLASSICSEARCH=" 分类检索 ";private int thm;//主题样式@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.search_tabhost);//requestWindowFeature(Window.FEATURE_NO_TITLE); SharedPreferences sharedPreferences=getSharedPreferences("DB",Context.MODE_PRIVATE); stabHost=(TabHost)findViewById(R.id.search_tabhost); //此时必须使用setup()方法启动tabHost //ActivityGroup会关注基类的实例调用 stabHost.setup(this.getLocalActivityManager()); thm=sharedPreferences.getInt("thmstl", 0); changethm(thm); //设置默认界面 stabHost.setCurrentTab(1);}//变换软件主题函数protected void changethm(int thm){switch(thm){//主题1图标case 0:{themeStytle(getResources().getColor(R.color.white));}break;}}//主题生成函数protected void themeStytle(int color){//高级检索页面View view1=View.inflate(SearchActivity.this,R.layout.subtab,null);//设置标题((TextView)view1.findViewById(R.id.subtab_textview_title)).setText(ADVANCEDSEARCH); ((TextView)view1.findViewById(R.id.subtab_textview_title)).setTextColor(color);//实现Activity的跳转TabHost.TabSpec spec1=stabHost.newTabSpec(ADVANCEDSEARCH).setIndicator(view1).setContent(new Intent(this,AvsearchActivity.class));// 将tab添加到tabHost里面stabHost.addTab(spec1);//快速检索页面View view2=View.inflate(SearchActivity.this,R.layout.subtab,null);//设置标题((TextView)view2.findViewById(R.id.subtab_textview_title)).setText(FASTSEARCH); ((TextView)view2.findViewById(R.id.subtab_textview_title)).setTextColor(color);//实现Activity的跳转TabHost.TabSpec spec2=stabHost.newTabSpec(FASTSEARCH).setIndicator(view2).setContent(new Intent(this,FastSearch.class));// 将tab添加到tabHost里面stabHost.addTab(spec2);//分类检索页面View view3=View.inflate(SearchActivity.this,R.layout.subtab,null);//设置标题((TextView)view3.findViewById(R.id.subtab_textview_title)).setText(CLASSICSEARCH);((TextView)view3.findViewById(R.id.subtab_textview_title)).setTextColor(color);//实现Activity的跳转TabHost.TabSpec spec3=stabHost.newTabSpec(CLASSICSEARCH).setIndicator(view3).setContent(new Intent(this,ClassicSearchActivity.class));// 将tab添加到tabHost里面stabHost.addTab(spec3);}}我认为unable to add window应该是进度条没有添加到activity。从错误的最后一句也能看出程序认为它需要的那个activity并没有在运行。那究竟需要哪个activity?哪个activity是当前在运行的?
我的理解是这样的,我们不能保证子Activity总是存在,因为它必须依靠父Activity而“生存”,所以,我们只能够保证父Activity是正在运行的,因此应该把代码修改成:progressDialog = new ProgressDialog(getParent()); 而不应该是progressDialog = new ProgressDialog(XXX.this);
@Overridepublic void onClick(View view) { progressDialog = new ProgressDialog(getParent());System.out.println(getParent().toString());progressDialog.setTitle("");progressDialog.setMessage("Please wait...");progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);progressDialog.setIndeterminate(true);progressDialog.setCancelable(true);progressDialog.show();}
修改之后,问题就解决了。
以下是父Activity:SearchActivity 和显示进度条的子Activity的生命周期函数调用情况。清楚可以看到,显示进度条的时候并不影响Activity的生命周期。
- 使用ActivityGroup时,在Activity中显示对话框出现的问题
- 使用ActivityGroup时,在Activity中显示对话框出现的问题
- 解决ActivityGroup的sub Activity中使用spinner出现的WindowManager$BadTokenException问题
- 解决ActivityGroup的sub Activity中使用spinner出现的WindowManager$BadTokenException问题
- 焦点在子Activity时ActivityGroup无法显示menu的问题
- 焦点在子Activity时ActivityGroup无法显示menu的问题
- ActivityGroup中嵌套activity时出现的黑色横线
- activitygroup的子activity中嵌套webview,利用webview与js交互,在实现js点击的内部类代码中实现activity跳转出现的线程问题
- activitygroup嵌套activitygroup时dialog显示问题
- 焦点在子Activity的listView时ActivityGroup无法响应Menu键的问题
- 焦点在子Activity的listView时ActivityGroup无法响应Menu键的问题
- 使用ActivityGroup类显示多个Activity
- activityGroup里显示对话框的注意事项
- 标签控件中显示对话框出现的问题及解决方法
- 使用ActivityGroup 时子选项卡activity里的EditText只能输入无法删除问题
- Android ActivityGroup的子类中调用AlertDialog出现问题
- 在fragment中显示对话框出现异常
- 在ActivityGroup时,调用对应activity的menu。
- 驱动开发之一 --- 创建一个简单的设备驱动(续) 【译文】
- java中的继承与对象的访问
- DebugView打印信息追溯与过滤
- DM8168 EMAC/MDIO模块(7)
- 关于人员的留存
- 使用ActivityGroup时,在Activity中显示对话框出现的问题
- Android.mk文件语法规范
- Java设计模式Proxy之初识
- 唐骏演讲节选
- Android --- Ubuntu 下安装ADT ,少WST插件问题,解决方案
- 驱动开发之一 --- 创建一个简单的设备驱动(续) 【译文】
- Android shape自定义button样式
- 数据结构和算法系列 - 折半算法
- 红帽企业 Linux 6.3 正式版发布