2011-02-15 69 views
2

我想显示一个进度消息时选择的偏好:不适用于参数

 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中严重缺乏经验,但将appreate线索!

回答

6

这是因为在这种情况下,您传递的是对内联活动(OnPreferenceClickListener)的引用,而不是上下文(通常必须是您的活动)。改变它并且它将工作:

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

多德感谢.... – 2011-02-15 20:19:52

3

你必须仔细阅读,仔细阅读编译器发出的错误信息。

编译器抱怨这一行:

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

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

您通过thisOnPreferenceClickListener类中,所以你传递一个OnPreferenceClickListener而不是Context的。

+0

是的,对不起,这让100%的意义,现在,我知道了“这个”到处是要字节我一些或其他时间! – 2011-02-16 06:02:13

1

this在此上下文中是OnPreferenceClickListener,而不是外部类。

如果你想指的是,你必须做

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

YourClassName是班级的偏好活动(或任何你在)的。

+0

非常感谢EboMike。 – 2011-02-16 06:03:33

0

我用这对我的异步Task.this就像魅力的作品。

 @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(); 
     };