我正在尝试在选择首选项时显示进度消息:
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方面的严重缺乏经验,但是会找到一条线索!
答案 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)
this
是OnPreferenceClickListener
,而不是外部类。
如果你想引用它,你将不得不这样做
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();
};