Android 来自字符串资源的 ProgressDialog setMessage

Android ProgressDialog setMessage from string Resources

我有这个代码

    public void serviceUnavailable() {
    runOnUiThread(new Runnable() {
        @Override
        public void run() {

            progressBar = new ProgressDialog(context);
            progressBar.setOnKeyListener(new DialogInterface.OnKeyListener() {
                @Override
                public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
                    if (keyCode == KeyEvent.KEYCODE_BACK) {
                        atsSocketManager.disconnect();
                        progressBar.dismiss();
                    }
                    return false;
                }
            });
            progressBar.setCancelable(false);
            progressBar.setTitle(R.string.ats_title_wait);
            progressBar.setMessage(R.string.ats_unavailable_service);
            progressBar.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            progressBar.show();
        }
    });
}

但是如果我这样设置,我在设置消息的地方出现错误

progressBar.setMessage(R.string.ats_unavailable_service);

错误是这样的

error: no suitable method found for setMessage(int) method ProgressDialog.setMessage(CharSequence) is not applicable (actual argument int cannot be converted to CharSequence by method invocation conversion) method AlertDialog.setMessage(CharSequence) is not applicable (actual argument int cannot be converted to CharSequence by method invocation conversion)

我设置标题的地方几乎相同并且有效

progressBar.setTitle(R.string.ats_title_wait);

如果我把文本放在逗号之间是可行的,但我想了解为什么这种方式不起作用

progressBar.setMessage("Service unavailable");

谢谢

是的,因为 setMessage() 不是为了将资源字符串作为 int 而设计的。

您必须从资源 int 中获取字符串并使用应用程序上下文的 getResource().getString() 方法应用于 setMessage()

喜欢,

progressBar.setMessage(context.getResources().getString(R.string.ats_unavailable_service));

如果 setMessage() 或任何其他此类方法在设置 xml 资源文件中的文本时遇到问题,尤其是上下文问题,那么这种方法对我有用,带有进度条:

//we initialize the progress bar, get the string from xml, and pass it to setMessage
    final ProgressDialog progressBar = new ProgressDialog(CheckinActivity.this);
    String waitMSG = getString(R.string.please_wait);
    progressBar.setMessage(waitMSG);