- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
alt text http://img252.imageshack.us/img252/643/snakesonadialog.png
大家好,
所以我正在对一个应用程序进行最后的润色,但整个应用程序仍然存在一个悬而未决的问题。
我在从网络上拉取数据时以 ProgressDialogs 的形式显示加载指示器。出于某种原因,我的 ProgressDialogs 似乎嵌套在另一个空白对话框中。结果很俗气。
我的布局代码如下所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/Theme.MyTheme.EpisodeList">
<ImageView android:src="@drawable/featured"
android:layout_width="fill_parent"
android:layout_height="50sp"
android:layout_gravity="top"
android:shadowRadius="0"
android:shadowColor="#FFFFFF"
android:id="@+id/header_image"
/>
<ListView android:id="@+id/android:list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>
我用来显示 ProgressDialog 的代码如下:
// In my class definition
private ProgressDialog p;
// in my onCreate method
p = new ProgressDialog(EpisodeActivity.this, ProgressDialog.STYLE_SPINNER);
p.setMessage("Loading...");
p.show();
从外观上看,似乎没有什么不对劲。我还附上了一张照片来说明问题。
感谢任何帮助!
最佳答案
经过几天的摸索,我找到了处理 ProgressDialogs 的最佳方法。在 Android 平台上处理简单的 ProgressDialogs 肯定过于复杂,但这并不意味着我们有任何借口不使用它们。希望它在未来会变得更好(连同文档)。以下是我的最佳做法。
ProgressDialog 在空白对话框中的嵌套问题似乎是 pre-2.0 代码在 2.1 或 2.2 系统上运行的问题。我只能猜测 show() 方法也在调用 super.show(),它在 2.1 和 2.2 上的行为不同。
因此,我发现如果您不直接在 ProgressDialog 对象上调用 show() ,效果最好。相反,使用内置的 showDialog() 和 onCreateDialog() 方法来玩弄对话。这是一个代码 fragment :
private static final int ID_DIALOG_LOADING = 0;
@Override
protected void onCreate(Bundle tedBundy) {
// Do stuff
showDialog(ID_DIALOG_LOADING);
// Do more stuff in a thread
}
@Override
public void run() {
// Do some stuff in this thread
handler.sendEmptyMessage(0);
}
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
// Let adapters know the data under them have changed
try {
dimissDialog(ArticlesList.ID_DIALOG_LOADING);
removeDialog(ArticlesList.ID_DIALOG_LOADING);
} catch (Exception e) {}
}
}
@Override
protected Dialog onCreateDialog(int id) {
if (id == ID_DIALOG_LOADING) {
ProgressDialog loadingDialog = new ProgressDialog(this);
loadingDialog.setMessage("Loading...");
loadingDialog.setIndeterminate(true);
loadingDialog.setCancelable(true);
return loadingDialog;
}
return super.onCreateDialog(id);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
try {
Log.i("ArticlesList.onSaveInstanceState", "Chirp chirp");
dismissDialog(ArticlesList.ID_DIALOG_LOADING);
removeDialog(ArticlesList.ID_DIALOG_LOADING);
} catch (Exception e) {
}
super.onSaveInstanceState(outState);
}
@Override
protected void onDestroy() {
try {
dismissDialog(ArticlesList.ID_DIALOG_LOADING);
removeDialog(ArticlesList.ID_DIALOG_LOADING);
} catch (Exception e) {
}
super.onDestroy();
}
@Override
protected void onPause() {
try {
dismissDialog(ArticlesList.ID_DIALOG_LOADING);
removeDialog(ArticlesList.ID_DIALOG_LOADING);
} catch (Exception e) {
}
super.onPause();
}
@Override
public void onDetachedFromWindow() {
try {
dismissDialog(ArticlesList.ID_DIALOG_LOADING);
removeDialog(ArticlesList.ID_DIALOG_LOADING);
} catch (Exception e) {
}
super.onDetachedFromWindow();
}
这是一个很长的代码 fragment 。您还会看到一堆重复的代码,它们不断地试图杀死该对话框。这样做是因为只要手机旋转,Android 就会销毁并重新创建一个 View。希望在未来的版本中,窗口不会在用户旋转屏幕时被完全销毁并重新加载,而是实现一个 onScreenRotate() 方法。
在尝试了几种不同的方法之后,这个 hacky 解决方案似乎是唯一能够提供一致、快速的结果的方法,即删除 ProgressDialog。希望这能在将来节省几天的时间。
关于android - ProgressDialog 嵌套在另一个空白对话框中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3310412/
当用户点击登录按钮时,我想在我的应用程序中使用 ProgressDialog。我遇到的问题是未找到 ProgressDialog - AS 中的红色文本。我错过了什么图书馆吗? 渐变 compile
我使用进度条创建了自定义进度对话框,但自定义进度对话框中的进度消息没有更新 最佳答案 您可以使用 ProgressBar实现相同的行为进度对话框 CustomProgressBar progressB
给出下面的代码。我想将标题“请等待调用被激活”转换为印地语(我在 Assets 文件夹中提供的字体).. public ShakeEventsListener(Context context, OnS
当我的设备是 4.4.4 时,我的 ProgressDialog 工作正常,我最近没有使用这个应用程序,同时设备升级到 Lillipop。我不确定这是否对这个问题造成了任何影响,只是提一下。 问题 1
ProgressDialog 在我的代码中添加 progressDialog.dismiss() 方法时无法显示 我还尝试添加Thread.sleep(),以便它的执行将 hibernate 一段时间
我只是想创建一个旋转的进度对话框。没有文字,没有边框,没有背景。只是一个旋转的通知,轻轻地位于内容顶部的屏幕中心。 我在创建这个自定义对话框时看到了两个不同的 Stack Overflow 问题。 他
我的意思是,ProgressDialog 静态方法 show() 的返回值与该类实例的非静态方法 show 之间有什么区别? 有什么理由选择这种策略 ProgressDialog pd = new P
我在进程运行时使用 ProgressDialog 时遇到问题。我已经尝试了所有可能的不正确方法,并查看了许多网站,这些网站提供了我正在尝试做的事情的示例,但是,我仍然遇到了线程在 ProgressDi
我开发了一个 Flutter 应用程序,我使用了 ProgressDialog小部件 ( progress_dialog: ^1.2.0 )。首先,我展示了 ProgressDialog小部件和一些代
在应用程序中创建ProgressDialog时,出现BadTokenException错误。我尝试阅读有关该问题的几篇文章,但我仍然无法真正弄清这是什么原因。单击按钮后,我调用对话框函数。 p
以下是我的代码: public void onClick(View view) { dialog=new ProgressDialog(view.getContext());
我有一个进度对话框,可以工作,但不符合我的外部需求: 我想把它做成这样: 我尝试过的: 1 - 主题化(仅使用样式和样式+主题方法),如此处所述 结果很糟糕(我在对话框周围有一个相同的蓝色边框颜色和标
我正在尝试从互联网获取数据,解析它,然后将数据显示给用户。该操作通常需要 3 秒左右,我希望旋转进度对话框显示一条消息,说明我正在加载数据。问题是 ProgressDialog 仅在加载即将完成时才显
我制作了一个食谱应用程序,我一直在解决一些问题,因为我无法运行该应用程序,但似乎每次修复错误时都会出现另一个错误,我的项目无法解决方法解雇()我不知道该怎么办,我已经根据 Youtube channe
我想从外部类中显示当前 Activity 的 ProgressDialog,而不是将变量传递到外部类或像其他已回答的问题一样使用静态变量。是否可以?这是一些简单的测试代码,可能有助于说明我想要做什么:
在“onCreate”中,我正在从网络下载数据。下载数据的持续时间为 10 秒。我不想在下载数据时使用 ProgressDialog。这是我的代码,但 ProgressDialog 没有出现: pub
我的应用程序正在从网络服务器加载一些数据。这次我想要一个进度对话框以避免应用程序用户出现黑屏。 Button ok = (Button) findViewById(R.id.ok);
我在我的 android 应用程序中创建了一个 ProgressDialog。但我遇到的问题是在它实际完成工作时停止旋转轮子。这是我的代码。我怎样才能让它在我进行其他工作时不断旋转轮子? button
我能做到: ((Activity) mContext).setProgressBarIndeterminateVisibility(true); 但不是这个: ((Activity) mConte
我想从服务内的线程增加一个进度对话框,我真的很难做到,这是我的代码,请帮助我。 我尝试了很多不同的方法,包括 asyncTask(我遇到了上下文问题)并尝试使用静态函数但它无法正常工作,我是 andr
我是一名优秀的程序员,十分优秀!