startActivity隐藏当前布局和对话框

时间:2012-05-14 17:25:11

标签: android dialog while-loop loading

我有一个startActivity,显示一个警告对话框,直到我的async任务中的xml下载和解析完成。然后我去下一个startActivity。问题是即使我对startActivity的线程有等待,屏幕上也没有显示任何内容。如果我注释掉命令startActivity,我会看到一切。为什么是这样?有人可以帮忙吗?

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);        

    AlertDialog ad = new AlertDialog.Builder(this).create();  
    ad.setCancelable(false);   
    ad.setMessage("Loading Events");         
    ad.show();



    if (!isNetworkAvailable()){ 
        ad = new AlertDialog.Builder(this).create();  
        ad.setCancelable(false); // This blocks the 'BACK' button  
        ad.setMessage("Not Connected Exiting");  
        ad.setButton("OK", new DialogInterface.OnClickListener() {  
              public void onClick(DialogInterface dialog, int which) {  
                     dialog.dismiss();    
                     finish();
                 }  
        });  
        ad.show();
       }
       downloadXML();     
       events=parseXML();

       ((CATApplication)this.getApplication()).setEvents(events);
       try{
       Thread.sleep(10000);
       Intent intent = new Intent(this,EventsListActivity.class);
       startActivity(intent);                  
       }catch(Exception e){}
}
//check for network connection
private boolean isNetworkAvailable(){
    ConnectivityManager connectivityManager=(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo=connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo.isConnectedOrConnecting();
}

public void onPause(){
    File xmlFile = new File("deletefileonexit");
    xmlFile.delete();
    finish();
    super.onPause();
}

private void downloadXML() {
    String url = "locationofxmlonweb";
    new DownloadFileAsync().execute(url);
}

public Events parseXML(){
    Events newEvents=new Events();
    try{
        while(!(new File("locationofxml").exists())){}
        InputStream in=new FileInputStream("locationofxml");
        newEvents=new ParseEventsXML().parse(in);
    }
    catch (Exception e){} 
    return newEvents;
}

}

2 个答案:

答案 0 :(得分:1)

为什么要使用某项活动?如果你要做的只是在下载数据时显示忙碌指示,你应该使用ProgressDialog。您可以使用dialog.show()轻松显示对话框,并通过调用dialog.dismiss()关闭对话框。如果要设置自定义消息,可以调用dialog.setMessage(“我的消息”)。

答案 1 :(得分:0)

您无法在UI线程中休眠,但仍希望能够显示某些内容。

删除此行:

 Thread.sleep(10000);

你想要的是一个处理程序并发布一个等待10000的runnable然后开始你的下一个活动。

    public void onCreate(Bundle savedInstanceState){

     .....


     new Handler().postDelayed(t, 10000);
    }

    Thread t = new Thread(){
        public void run() {
            Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
            startActivity(intent);
        };
    };

这就是答案,但它仍然存在根本性的缺陷,为什么你想要猜测一个随机时间然后开始下一个活动。您应该看一下使用带有ASyncTask的DialogFragment,当它返回时,您可以开始第二个活动。