来自字符串Resources的Android ProgressDialog setMessage

agu*_*ina 5 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();
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

但是如果我这样设置,我在线上会收到错误

progressBar.setMessage(R.string.ats_unavailable_service);
Run Code Online (Sandbox Code Playgroud)

错误就是这个

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

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

progressBar.setTitle(R.string.ats_title_wait);
Run Code Online (Sandbox Code Playgroud)

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

progressBar.setMessage("Service unavailable");
Run Code Online (Sandbox Code Playgroud)

谢谢

use*_*305 14

是的,因为setMessage()它不是为了将资源字符串设置为int.

您必须从资源int获取String并应用于setMessage()使用getResource().getString()Application Context的方法.

喜欢,

progressBar.setMessage(context.getResources().getString(R.string.ats_unavailable_service));
Run Code Online (Sandbox Code Playgroud)