DialogPreference强制关闭
问题描述:
对于学校项目,我正在使用PreferenceScreen
s作为框架构建应用程序。
我已经创建了2个新课程来满足我的需求:SeekBarDialogPreference
(设计用于处理体积和亮度)和DigitalPreference
(用于其他任何内容)。DialogPreference强制关闭
class SeekBarDialogPreference extends DialogPreference {
static HashMap<String, Integer> maxValues = new HashMap<String, Integer>(6);
AudioManager am = (AudioManager) APP.getContext().getSystemService(Context.AUDIO_SERVICE);
View views = new View(APP.getContext());
SeekBar sb;
CheckBox cb;
@Override
protected void onBindDialogView(View view) {
sb = (SeekBar) views.findViewById(R.id.seekbar);
cb = (CheckBox) views.findViewById(R.id.unchanged_check);
sb.setMax(maxValues.get(this.getKey()));
super.onBindDialogView(view);
}
@Override
protected void onDialogClosed(boolean positiveresult) {
super.onDialogClosed(positiveresult);
if (positiveresult) {
Editor editor = getEditor();
editor.putInt(this.getKey(), cb.isChecked() ? -1 : sb.getProgress());
editor.commit();
}
}
void show() {
onClick();
}
}
和DigitalPreference
public class DigitalPreference extends ListPreference{
void show(){
onClick();
}
这里是统一的首页上,这是主要的网页
public class TopPage extends PreferenceActivity {
@Override
public void onCreate(Bundle allthethings) {
super.onCreate(allthethings);
Map<String, ?> shareprefs = PreferenceManager.getDefaultSharedPreferences(this).getAll();
addPreferencesFromResource(R.xml.prefs);
}
@Override
public void onStart() {
getPrefs();
}
private SeekBarDialogPreference makeSeekBar(Preference pref) {
return (SeekBarDialogPreference) findPreference(pref.getKey());
}
private DigitalPreference makeDigital(Preference pref) {
return (DigitalPreference) findPreference(pref.getKey());
}
private void setClickListener(Preference preference, final boolean isSeekBar) {
preference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference pref) {
if (isSeekBar) {
makeSeekBarDialogPreference(pref).show();
} else {
makeDigitalPreference(pref).show();
}
return true;
}
});
}
public void getPrefs() {
SeekBarDialogPreference Ringvolume_preference = (SeekBarDialogPreference) findPreference("Ringvolume_preference");
setClickListener(Ringvolume_Preference, true);
//Instantiated each Preference and attached a ClickListener to each
}
我都在res/XML /的prefs.xml声明的偏好。现在,无论何时运行应用程序,我都会立即接近力量。我怀疑有什么毛病我的清单:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.gobernador"
android:versionCode="1"
android:versionName="0.1">
<uses-sdk android:minSdkVersion="5"
android:targetSdkVersion="10"/>
<application android:label="@string/app_name"
android:name="APP">
<activity android:name=".TopPage"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
我引用Android: launch a custom Preference from a PreferenceActivity,计算器等问题之一,但我一直没能制定出这个问题。
如果有人能牧养我正确的方向,你会让我走出一条巨大的车辙。谢谢!
编辑︰通过logcat游泳后,我发现在我的prefs.xml文件中引发的异常。
<?xml version="1.0" encoding="UTF-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:title="Settings">
<PreferenceScreen android:title="Volumes"
android:summary="Ring, Notification, System, etc.">
<com.gobernador.SeekBarDialogPreference android:key="Ringvolume_preference"
android:title="Ring Volume"
android:summary=""
android:dialogLayout="@layout/seekbar_layout"/>
<com.gobernador.SeekBarDialogPreference android:key="Notifyvolume_preference"
android:title="Notification Volume"
android:summary=""
android:dialogLayout="@layout/seekbar_layout"/>
... and so on
它试图访问SeekBarDialogPreference
。为什么它不工作?
编辑:抛出的异常是NoSuchMethodException: SeekBarDialogPreference(Context,AttributeSet)
。我定义了这个方法,我错过了什么?
答
我找到了我的解决方案。这是一个Java错误。我没有列出我的构造函数为SeekBarDialogPreference
和DigitalPreference
,因此系统无法调用它们。
logcat中的任何异常? – nhaarman 2012-02-15 00:42:40
在此处发布异常堆栈跟踪请 – 2012-02-15 02:35:58
您需要发布更多堆栈跟踪行。真正的错误原因在'com.gobernador.SeekBarDialogPreference'类构造函数(或其方法)中。 – Olegas 2012-02-15 07:40:11