来自字符串Resources的Android ProgressDialog setMessage

时间:2015-03-03 16:01:48

标签: android android-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);

错误就是这个

  

错误:没有为setMessage(int)找到合适的方法   方法ProgressDialog.setMessage(CharSequence)不适用   (实际的参数int不能通过方法调用转换转换为CharSequence)   方法AlertDialog.setMessage(CharSequence)不适用   (实际的参数int不能通过方法调用转换转换为CharSequence)

我设置的标题几乎相同并正在工作

progressBar.setTitle(R.string.ats_title_wait);

如果我把文本放在昏迷之间是有效的,但我想明白为什么这种方式不起作用

progressBar.setMessage("Service unavailable");

谢谢

2 个答案:

答案 0 :(得分:14)

是的,因为setMessage()的目的不是将资源字符串作为int。

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

像,

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

答案 1 :(得分: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);