列出首选项,如何在单击首选项时执行某些操作

时间:2012-07-26 17:01:23

标签: java android listview android-preferences listpreference

好的,所以我发现每个帖子都无法让这个工作,我正在尝试进入我的列表首选项

Settingsbasic.xml

<ListPreference
  android:title="themes"
  android:summary="Select the option of the list"
  android:key="listPref"
  android:entries="@array/Themes"
  android:entryValues="@array/list" 
  android:defaultValue="default" />

现在您可以在上面看到这是我的settingsbasic.xml文件中的listpreference。现在我需要知道的是我有2个java文件,我的主要活动。和我的首选项java文件。我需要知道当用户点击其中一个条目时,我可以做什么,喜欢打开一些东西或更改ui,我认为我可以从那里拿走它。我只需要知道代码的方式和位置。在主要的活动或偏好活动中。

这是我的偏好java文件

  public class Prefs extends PreferenceActivity {

ListPreference listPref;

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.settingsbasic);


       }

    protected void onResume() {
    super.onResume();

 // Registers a callback to be invoked whenever a user changes a preference.
    getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);

} 

protected void onPause() {
    super.onPause();

 // Unregisters the listener set in onResume().
    // It's best practice to unregister listeners when your app isn't using them to cut down on
    // unnecessary system overhead. You do this in onPause().
    getPreferenceScreen()
            .getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);

  public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        // Sets refreshDisplay to true so that when the user returns to the main
        // activity, the display refreshes to reflect the new settings.
        WebViewClientDemoActivity.????? = true;
    }

 }

任何示例代码都会有所帮助,或者添加到我上面的代码中。我只需要一个可以解释这段代码的人。我已经尝试了很多不同的东西,但没有一个可行。

好的,所以使用下面推荐的示例应用程序的方法是我的一些代码。

 Main Activity   

  public class WebViewClientDemoActivity extends Activity {

    public static String sPref = null;

    public void onStart() {
        super.onStart();

     // Gets the user's network preference settings
        SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
     // Retrieves a string value for the preferences. The second parameter
        // is the default value to use if a preference value is not found.
        sPref = sharedPrefs.getString("listPref", "Default");

         }

2 个答案:

答案 0 :(得分:1)

这是我使用PreferenceActivity的方式:

public class EditPrefs extends PreferenceActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.screen_prefs);
    }
}

然后在/ res / xml文件夹中我有XML文件:

<PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android">

     <ListPreference
        android:key="txtColor"
        android:title="textView Color"
        android:summary="select color for textViews"
        android:entries="@array/txtColor"
        android:entryValues="@array/txtColorValues" />
</PreferenceScreen>

在/ res / values中,我有这个XML文件包含项目及其值:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="txtColor">
        <item>blue</item>
        <item>brown</item>
        <item>gray</item>
        <item>violet</item>
    </string-array>
    <string-array name="txtColorValues">
        <item>#ff000099</item>
        <item>#5F1E02</item>
        <item>#333333</item>
        <item>#421C52</item>
    </string-array>
</resources>

然后我可以轻松地从另一个Android类调用此类,例如当用户单击菜单项时:

startActivity(new Intent(this, EditPrefs.class));

您可以在onCreate和onResume中调用首选项,如:

@Override
protected void onResume() {  
    super.onResume();
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    String txtColor = prefs.getString("txtColor", DEFAULT COLOR); // for instanse : #ff000099 
    textView.setBackgroundColor(Color.parseColor(txtColor));
}

答案 1 :(得分:1)

我已经解决了我的问题。

偏好设置

 public static String theme = "Theme1";

    @Override
    public void onBackPressed() {
      ListPreference listPreference = (ListPreference) findPreference("listPref");
      String currValue = listPreference.getValue();
      theme = currValue;
      super.onBackPressed();

   }

主要活动

 if (Prefs.theme.equals("Theme1"))
setContentView(R.layout.main);
    else 
       setContentView(R.layout.main2);

首选项XML

 <ListPreference
android:title="themes"
android:summary="Select the option of the list"
android:key="listPref"
android:entries="@array/listReturnValue"
android:entryValues="@array/listDisplayWord" />