不适用于参数

时间:2011-02-15 20:14:34

标签: java android

我正在尝试在选择首选项时显示进度消息:

        Preference prefLocation = (Preference) findPreference("location");
    prefLocation.setOnPreferenceClickListener(new OnPreferenceClickListener() {

        public boolean onPreferenceClick(Preference preference) {
            ProgressDialog pDialog = ProgressDialog.show(this, "Location" , "Finding location...", true);
            return true;
        }
    });

但是我在Eclipse中遇到错误:

The method show(Context, CharSequence, CharSequence, boolean) in the type ProgressDialog is not applicable for the arguments (new Preference.OnPreferenceClickListener(){}, String, String, boolean)

但是,当我在setOnPreferenceClickListener之前执行该行时,它编译得很好!

我可能透露了我在Java方面的严重缺乏经验,但是会找到一条线索!

4 个答案:

答案 0 :(得分:6)

那是因为在这种情况下,您传递的是对inneer活动(OnPreferenceClickListener)的引用而不是上下文(通常必须是您的活动)。将其更改为此,它将起作用:

ProgressDialog pDialog = ProgressDialog.show(NameOfYourActivity.this, "Location" , "Finding location...", true);

答案 1 :(得分:3)

您必须阅读,仔细阅读,编译器正在发出的错误消息。

编译器抱怨这一行:

ProgressDialog pDialog = ProgressDialog.show(this, "Location" , "Finding location...", true);

ProgressDialog.show()方法需要Context作为第一个参数。

您从this课程中通过了OnPreferenceClickListener,因此您传递的是OnPreferenceClickListener而不是Context

答案 2 :(得分:1)

在此上下文中,

thisOnPreferenceClickListener,而不是外部类。

如果你想引用它,你将不得不这样做

ProgressDialog pDialog = ProgressDialog.show(YourClassName.this, "Location" , "Finding location...", true);

YourClassName是您偏好活动的类别(或您所在的任何内容)。

答案 3 :(得分:0)

我在Async Task上使用它。这就像魅力一样。

        @Override
        protected void onPreExecute() {
            super.onPreExecute();

            dialog = new ProgressDialog(ActivityAddTicket.this);
            dialog.setTitle(R.string.processing);
            dialog.setMessage(getResources().getString(R.string.loading));
            dialog.show();
        };