创建一个将根据操作动态刷新的AlertDialog

时间:2013-01-22 21:44:56

标签: android

我正在处理一个代表同步操作的对话框。所以我有一个可变数量的记录,当我在我的应用程序上选择“同步”按钮时,它会显示如下内容:

“同步:记录y的y”

其中x是当前记录,y是总数。随着记录成功同步,对话框将刷新以表示此内容。

查看Android API,看起来创建一个AlertDialog是可行的方法,但我不确定如何编写代码,以便AlertDialog实例在执行同步操作时动态更新。

3 个答案:

答案 0 :(得分:1)

您可以使用ProgressDialog。启动AsyncTask,在onPreExecute()回调中创建ProgressDialog,在onPublishProgress()回调中更新它(为了线程安全原因,必须从doInBackground()方法调用publishProgress()),然后在onPostExecute()上将其关闭回调。

AsyncTask文档与您需要做的事情非常接近:http://developer.android.com/reference/android/os/AsyncTask.html

答案 1 :(得分:0)

这是我在AlertDialog

中将文本居中的一个技巧
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Title");
builder.setMessage("Message");
builder.setPositiveButton("OK", null);
AlertDialog dialog = builder.show();

// Must call show() prior to fetching text view
TextView messageView = (TextView)dialog.findViewById(android.R.id.message);
messageView.setGravity(Gravity.CENTER);

我打赌如果你把最后一行改为

messageView.setText("Whatever you need");

它可以工作

答案 2 :(得分:0)

为新对话框创建一个新活动,添加Android清单。

创建一个新对话框,如果为null,则取消该对话框。 并捕获新的Intents onNewIntent以更新对话框的内容。 如果您有任何疑问,请告诉我。

public class NewDialog extends Activity {

private AlertDialog alertDialog;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Remove title bar
    requestWindowFeature(Window.FEATURE_NO_TITLE);
}

@Override
protected void onStart() {
    super.onStart();
    showNextDialog();
}

// Cancel the dialog if it is not null (i.e. contains message from previous dialog)
protected Dialog showNextDialog() {
        if (alertDialog != null) {
            alertDialog.cancel();
            alertDialog = null;
        }

// Build dialog with updated info
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle(dialogTitle);
        builder.setMessage(dialogMessage);
        alertDialog = builder.create();
        alertDialog.show();
        return alertDialog;
}

protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    showNextDialog();
    }

}