从PreferenceScreen转到DialogPreference

时间:2010-01-29 19:51:30

标签: android

我的应用程序有一个设置菜单,实际上是一个PreferenceActivity。 当它被创建时,如果没有设置布尔值,我想转到设置它的DialogPreference。

我尝试使用intent但是应用程序强制关闭此错误消息:

  

E / AndroidRuntime(239):   android.content.ActivityNotFoundException:   无法找到显式活动类   {com.xxxx / com.xxxx.xxxxPreference};   你有没有宣布这项活动?   你的AndroidManifest.xml?

我该怎么做?可以将DialogPreference添加到清单吗?

2 个答案:

答案 0 :(得分:4)

DialogPreference本身不是Activity。它只是一个Preference,点击时会显示Dialog

问题是没有明显的方式以编程方式点击Preference。但是,由于您使用的是DialogPreference,因此您已经拥有了自己的子类。因此,我们可以通过将以下方法添加到DialogPreference的子类:

来解决我们的问题
//Expose the protected onClick method
void show() {
    onClick();
}

然后在您onCreate()的{​​{1}}中,您将有类似的内容从XML文件中加载首选项:

PreferencesActivity

之后你可以输入这样的代码:

// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.preferences);

这是一种破解,因为暴露booleanProp = true; //set this to the value of the property you're checking if (! booleanProp) { //Find the Preference via its android:key //MyDialogPreference is your subclasss of DialogPreference MyDialogPreference dp = (MyDialogPreference)getPreferenceScreen().findPreference("dialog_preference"); dp.show(); } 方法并不理想,但确实有效。

另一种选择是将protected替换为包含您希望维护的所有选项的Dialog,然后您可以通过PrefenceActivity启动它,但我假设您希望自己的自定义Intent具有特定布局,这是一个很好的理由。如果您确实需要第二个Dialog,可以将其添加到首选项XML文件中,如下所示:

PreferenceActivity

答案 1 :(得分:-1)

要使用Intent启动活动,该活动必须位于Android清单中。只需添加如下行:

<activity android:name=".path.to.MyActivity"/>