Java Android从SettingsActivity中删除类别而不使应用程序崩溃?

Java Android从SettingsActivity中删除类别而不使应用程序崩溃?,java,android,eclipse,Java,Android,Eclipse,我使用eclipse创建了一个设置活动。设置活动自动创建两个示例类别(除了常规设置之外):通知和数据&同步。问题是,我根本不知道如何删除它们而不使我的应用程序崩溃: 我试图简单地删除此块(我将其转换为注释),但应用程序崩溃: // Add 'notifications' preferences, and a corresponding header. fakeHeader = new PreferenceCategory(this); fakeHeader.setTitl

我使用eclipse创建了一个设置活动。设置活动自动创建两个示例类别(除了常规设置之外):通知和数据&同步。问题是,我根本不知道如何删除它们而不使我的应用程序崩溃:

我试图简单地删除此块(我将其转换为注释),但应用程序崩溃:

    // Add 'notifications' preferences, and a corresponding header.
    fakeHeader = new PreferenceCategory(this);
    fakeHeader.setTitle(R.string.pref_header_notifications);
    getPreferenceScreen().addPreference(fakeHeader);
    addPreferencesFromResource(R.xml.pref_notification);
我不能从空白活动开始,因为这是我的第一个应用程序,所以我更喜欢从示例设置活动开始

如何删除“通知”首选项,使我只有常规设置和数据同步

这是logcat崩溃时的内容:
从你的小例子中很难说。eclipse崩溃时会说什么(切换到DDMS或DEBUG视图并查看logcat输出)


如果您刚刚开始,我建议您使用向导创建第一个应用程序,而不是更改现有示例。

尝试一下,看看这是否会删除首选项:

myPreferenceScreen.remove(notifications);

我一直在努力做同样的事情,我想我终于找到了该做的事情。 首先,确保不删除fakeHeader的声明。 然后对这些行进行注释:

fakeHeader.setTitle(R.string.pref_header_notifications);
getPreferenceScreen().addPreference(fakeHeader);
addPreferencesFromResource(R.xml.pref_notification);
如果你不做更多的事情,你会遇到一个空指针异常。原因很简单,在下面的一些行中,您可以找到“setupSimplePreferenceScreen”方法。它确保用户更改的值相应更新。要使其正常工作,您还必须对该行进行注释:

bindPreferenceSummaryToValue(findPreference("notifications_new_message_ringtone"));
请注意,这只会使设置屏幕在非XL大屏幕上工作! 这是因为代码使用两种不同的方法来表示设置。简单的方法是不带片段的方法,它使用“SetupSimplePreferenceScreen”中不推荐的方法。 不幸的是,在带有XL屏幕的设备上运行未经修改的设置活动,对我来说都会导致即时崩溃。所以你必须自己解决:)

EDIT:gian1200在他对这个答案的评论中指出了实现这一点的步骤

顺便说一下,要添加自定义设置,请查看以下文件(我假设您没有重命名这些文件)

1:

包含设置的名称和说明

2:

这些文件包含设置类别的标题名(pref_headers.xml)以及类别内容。您可以轻松添加新类别或修改现有类别。我认为你最好和他们一起玩一会儿。你会很容易掌握它的窍门。

你必须去掉它

bindPreferenceSummaryToValue(findPreference("notifications_new_message_ringtone"));

如果要删除通知部分。还有一些其他bindPreferenceSummaryToValue()与其他示例类别相匹配。

我在原始问题上附加了日志猫的内容。我不知道它是否有用。你有一个空指针异常。我说不出来,因为你没有提供所有的代码,但我想在你评论了“new”行之后,你可能仍然在使用“fakeheader”。谢谢,我实际上无法解决它,但我寻找了向导,最终按照教程完成了。这不是“bug”您需要更改pref_headers.xml,并将您的包名和用作设置的活动类的名称放在一起。有关这些信息,我将尝试很多。希望我能支持你的评论!;]
/res/xml/pref_data_sync.xml
/res/xml/pref_general.xml
/res/xml/pref_headers.xml
/res/xml/pref_notification.xml
bindPreferenceSummaryToValue(findPreference("notifications_new_message_ringtone"));