我想实现一种功能,用户可以使用复选框共享首选项选择要显示的项目组。确切地说,我将从首选项中阅读检查项目并显示。
这是我的偏好类
public class Preferences extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//One way to add default preferences
//addPreferencesFromResource(R.xml.prefs);
//For now I prefer this
setPreferenceScreen(defaultPref());
}
// The first time application is launched this should be read
private PreferenceScreen defaultPref() {
PreferenceScreen root = getPreferenceManager().createPreferenceScreen(this);
CheckBoxPreference checkboxPref = new CheckBoxPreference(this);
checkboxPref.setKey("1");
checkboxPref.setTitle("SomeRandomStuff");
root.addPreference(checkboxPref);
return root;
}
public showAllPreferences () {
// TO SHOW ALL THE PREFERENCES BUT NOT SURE HOW TO DISPLAY THEM
}
}
现在我无法理解如何动态添加更多偏好并在首选屏幕中显示它们。
这是主要的活动类
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
setContentView(R.layout.main);
}catch (Exception e) {
e.printStackTrace();
}
exView = (ExpandableListView) findViewById(R.id.expandableListView1);
// STUFF TO ADD IN PREFERENCES
editText = (EditText) findViewById(R.id.editText1);
//BUTTON TO ADD PREFERENCES.(SEARCH TERM IS IDENTIFIED AND ADDED TO PREF)
addButton = (ImageButton) findViewById(R.id.imageButton1);
// BUTTON TO DISPLAY PREFERENCES
prefButton = (ImageButton) findViewById(R.id.imageButtonPref);
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
final SharedPreferences.Editor editor = settings.edit();
addButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
PrefObject obj = new PrefObject();
String key = Integer.toString(i);
String title = editText.getText().toString();
//prefArray.add(obj);
editor.putString(key, title);
editor.commit();
i++
}
});
prefButton.setOnClickListener(new OnClickListener() {
// This method should show the preferences activity with new data
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(Main.this, Preferences.class);
startActivity(intent);
// I know how to call the intent but I am not sure if
// how to read the saved contents and display it
Preferences pref = new Preferences();
pref.showAllPreferences();
}
});
答案 0 :(得分:3)
AFAIK,首选项没有“可见性”选项,当你认为它只是一个ListView时,这有点意义。
见[1]。对于我所看到的,你可以做这样的事情:
PreferenceScreen screen = this.getPreferenceScreen();
// Use "1" since you're using "1" to create it.
CheckBoxPreference ckbox = (CheckBoxPreference) this.findPreference("1");
screen.removePreference(ckbox);
要重新创建,您可以执行此操作[2]:
screen.addPreference(ckbox);
此外,请记住使用setOrder(int order)
创建您的偏好设置,以便在重新创建时,它将在适当的位置重新创建。
正如您所看到的,可能值得保持对首选项的全局引用,以使其更容易和更快。
当然,我不需要告诉您应该将该逻辑集成到CheckboxPreference侦听器中。除了Reto Meier之外,没有其他人可以看到this answer看到一个好方法(它也是一个复选框)。在那里,他向整个屏幕注册一个监听器,并检查哪个偏好触发了监听器,但是你可以通过设置它setOnPreferenceChangeListener
来更简单(但稍后会更详细)。
*编辑:我看到您还使用按钮添加首选项。您还可以在按钮本身中实现上述相同的逻辑。这完全取决于您是否想使用复选框或按钮来执行此操作。
最后,设置启用状态可能是值得的,除非您正在执行类似“查看高级首选项”或类似值的东西,以防止新手用户远离您的应用程序执行危险的操作。但通常情况下,启用状态对用户体验更有效,恕我直言。
我希望这能回答你的问题。