Android 如何通知用户正在加载内容?

Android 如何通知用户正在加载内容?,android,Android,有没有一种在Android中显示“加载”动画的首选方法?目前,我正在显示一个对话框,其中包含长时间运行的进程的文本“加载…”。让.gif文件来处理这个问题很难,所以我想知道这是否是一个以前解决过的问题,如果是,如何解决?在我的应用程序中,我通常使用一个ProgressDialog来显示一条旋转的“加载…”消息。有更奇特/更漂亮的方法,但这是一个快速简单的内置解决方案 ProgressDialog progressDialog = ProgressDialog.show(Activity.this

有没有一种在Android中显示“加载”动画的首选方法?目前,我正在显示一个对话框,其中包含长时间运行的进程的文本“加载…”。让.gif文件来处理这个问题很难,所以我想知道这是否是一个以前解决过的问题,如果是,如何解决?

在我的应用程序中,我通常使用一个
ProgressDialog
来显示一条旋转的“加载…”消息。有更奇特/更漂亮的方法,但这是一个快速简单的内置解决方案

ProgressDialog progressDialog = ProgressDialog.show(Activity.this, "",
                        "Loading...");
…做些工作

progressDialog.dismiss();

progressDialog = null;
如果您有一个静态实用程序类来生成警报和对话框,那么这里有两个不错的补充:

public static ProgressDialog createProgressDialog(Context context, String title, String message, boolean isCancelable)
{
    ProgressDialog dialog = new ProgressDialog(context);
    dialog.setTitle(title);
    dialog.setMessage(message);
    dialog.setCancelable(isCancelable);

    return dialog;
}
如果您正在使用
AsyncTask
s在后台执行工作,则在显示并关闭
ProgressDialog
时,检查
活动是否仍处于“活动”状态且未完成尤为重要,否则您的应用程序将因异常而死亡(请参阅)

与关闭对话框相同:

public static void safeDismissProgressDialog(Context context, ProgressDialog dialog)
{
    if(!((Activity) context).isFinishing())
    {
        dialog.dismiss();
    }
}
请参阅API参考:


在我的应用程序中,我通常使用
ProgressDialog
来显示旋转的“加载…”消息。有更奇特/更漂亮的方法,但这是一个快速简单的内置解决方案

ProgressDialog progressDialog = ProgressDialog.show(Activity.this, "",
                        "Loading...");
…做些工作

progressDialog.dismiss();

progressDialog = null;
如果您有一个静态实用程序类来生成警报和对话框,那么这里有两个不错的补充:

public static ProgressDialog createProgressDialog(Context context, String title, String message, boolean isCancelable)
{
    ProgressDialog dialog = new ProgressDialog(context);
    dialog.setTitle(title);
    dialog.setMessage(message);
    dialog.setCancelable(isCancelable);

    return dialog;
}
如果您正在使用
AsyncTask
s在后台执行工作,则在显示并关闭
ProgressDialog
时,检查
活动是否仍处于“活动”状态且未完成尤为重要,否则您的应用程序将因异常而死亡(请参阅)

与关闭对话框相同:

public static void safeDismissProgressDialog(Context context, ProgressDialog dialog)
{
    if(!((Activity) context).isFinishing())
    {
        dialog.dismiss();
    }
}
请参阅API参考:


您可以在Android设计文档中找到一些指导:

您可以在Android设计文档中找到一些指导:

您可以使用进度条。我通常通过ASYCTASK使用它。并将以下方法重载为:

protected void onProgressUpdate(Integer... progress) {
((ProgressBar) findViewById(R.id.progressBar1)).setProgress(progress[0]);
}

您可以使用进度条。我通常通过ASYCTASK使用它。并将以下方法重载为:

protected void onProgressUpdate(Integer... progress) {
((ProgressBar) findViewById(R.id.progressBar1)).setProgress(progress[0]);
}

根据您的应用程序设计,它可能会有所不同,但
ProgressDialog
是一种相当常见的解决方案。这将向您展示这一切是如何联系在一起的,以及这两种变体(显示或不显示进度)。

根据您的应用程序设计,它可能会有所不同,但
进度对话框是一种相当常见的解决方案。这将向您展示这一切是如何联系在一起的,以及这两种变化(显示或不显示进度)。

以下是一个很好的示例:

假设您尝试登录并等待服务器的响应。等待时显示进度对话框,成功时将登录活动切换到主:

    private ProgressDialog dialog;

   ...
 dialog = ProgressDialog.show(FirstLoginActivity.this, "", "Connecting. Please wait...", true);
    HeavyTask task = new HeavyTask();
    task.execute(str1, str2);   

private class HeavyTask extends AsyncTask<String, Void, Void> {

    private String str1= "";
    private String str2= "";



    protected Void doInBackground(String... args) {

        str1= args[0];
        str2= args[1];


        try {
            doSomething(str1, str2);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }

    protected void onPostExecute(Void results) {

        mHandler.postDelayed(new Runnable() {
            @Override
            public void run() {
                doStuff(str1, str2);                    
            }
        }, 500);            
    }   

private void doStuff(String str1, String str2) {
  mHandler.postDelayed(new Runnable() {
                            @Override
                            public void run() {

                                startActivity(new Intent().setClass(FirstLoginActivity.this, OtherActivity.class).setData(getIntent().getData()));
                                Toast.makeText(getApplicationContext(), "Registration succeeded.", Toast.LENGTH_LONG).show();
                                //kill the dialog waiting
                                dialog.dismiss();
                                dialog = null;


                            }
                        }, 1000);

}
私有进程对话框;
...
dialog=ProgressDialog.show(FirstLoginActivity.this,“,”正在连接。请稍候…,true);
重任务任务=新重任务();
执行(str1,str2);
私有类重任务扩展异步任务{
私有字符串str1=“”;
私有字符串str2=“”;
受保护的Void doInBackground(字符串…args){
str1=args[0];
str2=args[1];
试一试{
剂量测定法(str1、str2);
}捕获(例外e){
e、 printStackTrace();
}
返回null;
}
受保护的void onPostExecute(void结果){
mHandler.postDelayed(新的Runnable(){
@凌驾
公开募捐{
doStuff(str1,str2);
}
}, 500);            
}   
私有void doStuff(字符串str1、字符串str2){
mHandler.postDelayed(新的Runnable(){
@凌驾
公开募捐{
startActivity(new Intent().setClass(FirstLoginActivity.this,OtherActivity.class).setData(getIntent().getData());
Toast.makeText(getApplicationContext(),“注册成功”,Toast.LENGTH_LONG.show();
//停止对话等待
dialog.dismise();
dialog=null;
}
}, 1000);
}
以下是一个很好的例子:

假设您尝试登录并等待服务器的响应。在等待时显示进度对话框,在成功时将登录活动切换到主:

    private ProgressDialog dialog;

   ...
 dialog = ProgressDialog.show(FirstLoginActivity.this, "", "Connecting. Please wait...", true);
    HeavyTask task = new HeavyTask();
    task.execute(str1, str2);   

private class HeavyTask extends AsyncTask<String, Void, Void> {

    private String str1= "";
    private String str2= "";



    protected Void doInBackground(String... args) {

        str1= args[0];
        str2= args[1];


        try {
            doSomething(str1, str2);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }

    protected void onPostExecute(Void results) {

        mHandler.postDelayed(new Runnable() {
            @Override
            public void run() {
                doStuff(str1, str2);                    
            }
        }, 500);            
    }   

private void doStuff(String str1, String str2) {
  mHandler.postDelayed(new Runnable() {
                            @Override
                            public void run() {

                                startActivity(new Intent().setClass(FirstLoginActivity.this, OtherActivity.class).setData(getIntent().getData()));
                                Toast.makeText(getApplicationContext(), "Registration succeeded.", Toast.LENGTH_LONG).show();
                                //kill the dialog waiting
                                dialog.dismiss();
                                dialog = null;


                            }
                        }, 1000);

}
私有进程对话框;
...
dialog=ProgressDialog.show(FirstLoginActivity.this,“,”正在连接。请稍候…,true);
重任务任务=新重任务();
执行(str1,str2);
私有类重任务扩展异步任务{
私有字符串str1=“”;
私有字符串str2=“”;
受保护的Void doInBackground(字符串…args){
str1=args[0];
str2=args[1];
试一试{
剂量测定法(str1、str2);
}捕获(例外e){
e、 printStackTrace();
}
返回null;
}
受保护的void onPostExecute(void结果){
mHandler.postDelayed(新的Runnable(){
@凌驾
公开募捐{
doStuff(str1,str2);
}
}, 500);            
}   
私有void doStuff(字符串str1、字符串str2){
mHandler.postDelayed(新的Runnable(){
@凌驾
公开募捐{
startActivity(new Intent().setClass(FirstLoginActivity.this,OtherActivity.class).setData(getIntent().getData());
Toast.makeText(getApplicationContext(),“注册成功”,Toast.LENGTH_LONG.show();
//停止对话等待
dialog.dismise();
dialog=null;
}
}, 1000);
}

要遵循Android指南,您不应该显示“加载”消息:@Oyashiro-