2014-03-28 18 views
1

我試圖對用戶輸入做出偏好反應,但沒有運氣。我使用的PreferenceFragment,似乎沒有一個我發現的代碼到目前爲止可以幫助我。設置偏好(在PreferenceFragment內)對點擊作出響應

這裏是我的preferences.xml:

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen " > 

    <PreferenceCategory 
     " 
     " > 
     <CheckBoxPreference 
      " 
      " 
      o aplicativo para uso" 
      aplicativo" /> 
    </PreferenceCategory> 

</PreferenceScreen> 

這裏是我的屏幕代碼:

package com.gh0st.gerenciador; 

import android.content.SharedPreferences; 
import android.content.SharedPreferences.OnSharedPreferenceChangeListener; 
import android.os.Bundle; 
import android.preference.PreferenceActivity; 
import android.preference.PreferenceFragment; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.Toast; 

public class TelaPreferencias extends PreferenceActivity implements 
     OnSharedPreferenceChangeListener { 

    public static final String KEY_PREF_SYNC_CONN = "prefs_ativar"; 


    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     getFragmentManager().beginTransaction() 
       .replace(android.R.id.content, new SettingsFragment()).commit(); 

    } 


    public boolean onCreateOptionsMenu(Menu menu) { 

     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.tela_preferencias, menu); 
     return true; 
    } 

    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 
     if (key.equals(KEY_PREF_SYNC_CONN)) { 
      Toast.makeText(this, "Teste", Toast.LENGTH_SHORT).show(); 

     } 
    } 


    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

    public static class SettingsFragment extends PreferenceFragment { 

     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

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

} 

我想,當我接觸的偏好,它顯示了一個敬酒。代碼似乎很好(沒有錯誤),但它不起作用。我想我沒有聽到聽衆的想法。有人可以幫我嗎?

謝謝!

在我忘記之前,我正在使用API級別19(Android 4.4)。我不知道這是否會改變某些事情。

+0

OK ...您在哪裏註冊(然後希望取消註冊)聽衆? –

+1

TBH,我不知道我必須註冊它。你提供的代碼就像一個魅力!謝謝! –

回答

0

缺少收聽者的註冊?這是我該如何做的:

// Register the listener 
@Override 
protected void onResume() 
{ 
    // Register OnSharedPreferenceChangeListener 
    PreferenceManager.getDefaultSharedPreferences(getApplicationContext()). 
    registerOnSharedPreferenceChangeListener(this); 

    // Fire the base method 
    super.onResume(); 
} 

// Unregister the listener 
@Override 
protected void onPause() 
{ 
    // Unregister OnSharedPreferenceChangeListener 
    PreferenceManager.getDefaultSharedPreferences(getApplicationContext()). 
    unregisterOnSharedPreferenceChangeListener(this); 

    // Fire the base method 
    super.onPause(); 
} 
+1

猜猜我錯過了這個。不記得有關在Android文檔上閱讀此內容的信息。謝謝! –

1

我建議你使用的

Preference.OnPreferenceClickListener 

你可以找到更多關於它在這裏:http://developer.android.com/reference/android/preference/Preference.OnPreferenceClickListener.html

例子:關於折舊

Preference p = findPreference("yourkey"); 
p.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { 

     public boolean onPreferenceClick(Preference p) { 
      // TODO stuff    
      return true; 
     } 
    }); 

編輯

PreferenceActivity.findPreference("key") - >deprecated

PreferenceFragment.findPreference("key") - >not deprecated

+0

是不是該方法**棄用**? –

+0

我正要說同樣的。另外,我會補充說我使用API​​級別19(Android 4.4)。 –

+0

實際上,如果用在PreferenceFragment中,則不推薦使用findPreference()。只有PreferenceActivity的舊方法是。它顯示爲棄用的原因是因爲您在PreferenceActivity中使用了int。 –