Android ProgressDialog从字符串资源设置消息

5

我有这段代码

    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);

错误信息如下:

错误:未找到适当的方法以设置消息(setMessage) ProgressDialog.setMessage (CharSequence) 方法不适用 (实际参数 int 无法通过方法调用转换为 CharSequence) AlertDialog.setMessage (CharSequence) 方法不适用 (实际参数 int 无法通过方法调用转换为 CharSequence)

我在设置标题时几乎相同,并且可以使用。
progressBar.setTitle(R.string.ats_title_wait);

如果我把文本放在逗号之间,它可以工作,但是我想知道为什么这种方法不起作用。
progressBar.setMessage("Service unavailable");

谢谢你


4
你有上下文。.setMessage(context.getResources().getString(R.string.ats_unavailable_service)); 的意思是设置对话框的消息内容为 R.string.ats_unavailable_service 所指定的字符串资源,而这个资源无法使用。 - Blackbelt
@Blackbelt 谢谢,那个完美地解决了问题。 - agusgambina
2个回答

14

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

您需要从资源整数中获取String,并使用应用程序上下文的getResource().getString()方法应用于setMessage()

例如:

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

.getResource() should change to .getResources() - pavlos

0
如果setMessage()或其他类似的方法在从xml资源文件中设置文本时出现问题,特别是与Context相关的问题,那么这种方法对我来说可以使用进度条解决:
//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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接