使用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的生命周期。




原创粉丝点击