2012-01-12 21 views
0
public class SettingsActivity extends PreferenceActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    /* Some initializations */ 
    LinearLayout layout = new LinearLayout(this); 
    layout.setOrientation(LinearLayout.VERTICAL); 

    ListView listView = new ListView(this); 
    listView.setId(android.R.id.list); 
    listView.setLayoutParams(new LinearLayout.LayoutParams(
      LinearLayout.LayoutParams.FILL_PARENT, 
      LinearLayout.LayoutParams.WRAP_CONTENT, 1)); 
    layout.addView(listView); 

    this.setContentView(layout); 
    /* Preferences time! (we build the preferences) */ 
    Preference version = getPreference("My School Manager", "Version 2.0", 
      null); 
    Preference author = getPreference("Author", "Simone Casagranda", null); 
    Preference marketLink = getPreference("Android market", 
      "View all my apps :)", 
      new Intent(Intent.ACTION_VIEW, Uri 
        .parse("http://market.android.com/details?id=" 
          + "it.trento.alchemiasoft.casagranda.simone"))); 

    CheckBoxPreference check = new CheckBoxPreference(this); 
    check.setTitle("Checkbox"); 
    check.setSummary("Example of checkbox"); 

    DialogPreference license = new MyDialogPreference(this, "License", 
      "This is the license for...bla bla"); 

    /* Now we add the preferences to the preference screen */ 
    PreferenceScreen preferenceScreen = this.getPreferenceManager() 
      .createPreferenceScreen(this); 
    addPreferenceCategory(preferenceScreen, "Preferences Tutorial", 
      version, author, marketLink, check, license); 
    this.setPreferenceScreen(preferenceScreen); 
} 

private boolean addPreferenceCategory(PreferenceScreen preferenceScreen, 
     String titleCategory, Preference... preferences) { 
    boolean addPreference = false; 
    for (Preference preference : preferences) { 
     if (preference != null) 
      addPreference = true; 
    } 
    if (addPreference) { 
     PreferenceCategory preferenceCategory = new PreferenceCategory(this); 
     preferenceCategory.setTitle(titleCategory); 
     preferenceScreen.addPreference(preferenceCategory); 
     for (Preference preference : preferences) { 
      if (preference != null) 
       preferenceCategory.addPreference(preference); 
     } 
     return true; 
    } else 
     return false; 
} 

private Preference getPreference(String title, String summary, Intent intent) { 
    Preference pref = new Preference(this); 
    pref.setTitle(title); 
    pref.setSummary(summary); 
    if (intent != null) 
     pref.setIntent(intent); 
    return pref; 
} 

public class MyDialogPreference extends DialogPreference { 
    public MyDialogPreference(Context context, String title, String text) { 
     super(context, null); 
     this.setTitle(title); 
     this.setDialogMessage(text); 
    } 
} 

}理解PreferenceActivity

的在这一段代码,偏好列在列表视图。它不需要适配器吗?我没有看到数据被输入到列表视图中。这个首选项屏幕怎么样?是否需要设置偏好?

回答

1

PreferenceActivity自行处理偏好。该适配器内置于PreferenceActivity中,以便您不必担心。而不是以编程方式创建您的首选项,您可以使用XML来执行相同的操作。检查this tutorial

偏好活动消除了很多痛苦。想象一下,编写用于连接所有UI操作的代码,如显示对话框,更改首选项的状态并保存它们。偏好活动会让你远离痛苦。

+0

好吧,从上面,什么是数据源进入列表视图? PreferenceScreen,PreferenceCategory,Preference ...等等吗? – lilzz 2012-01-12 06:17:58

+0

所有的3 :),每个项目呈现不同,并按给定的顺序。 – 2012-01-12 06:23:52