2012-11-13 32 views
1

我有執行首選項的問題。 當我運行我的應用程序,然後單擊首選項選項卡上沒有任何反應。 我不知道代碼有什麼問題,因爲logcat不顯示任何東西。 並提前致謝。onPreferenceClick不工作在android

public class Reset extends PreferenceActivity{ 

private Preference myPreference; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    myPreference = findPreference("reset"); 
    myPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() { 

     public boolean onPreferenceClick(Preference arg0) { 
      Builder alertDialog = new AlertDialog.Builder(Reset.this); 
      alertDialog.setMessage("Reset?"); 
      alertDialog.setCancelable(true); 
      alertDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getBaseContext());       
        SharedPreferences.Editor editor = settings.edit(); 
        editor.clear(); 
        editor.commit(); 
       } }); 
      alertDialog.setNegativeButton("No", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        dialog.cancel(); 
       } }); 
      alertDialog.show(); 
      return false; 
     } 
    }); 

} 

} 

XML:

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > 
<Preference android:title="Reset Score" android:key="reset"> 
</Preference> 
</PreferenceScreen> 
+0

'myPreference'沒有被初始化,所以它總是null,'NullPointerException'是th在'onCreate()'方法中傳播。 – jelies

+0

我編輯了我的代碼,但同樣的問題。 – Taha

+0

問題是相同的@Taha,'myPreference'爲空,並且您從中獲取preferenceManager。用這個代替:'myPreference = findPreference(「reset」);' – jelies

回答

3

此行添加到您的代碼:

addPreferencesFromResource(R.xml.preferences); 

此代碼工作:

import android.app.AlertDialog; 
import android.app.AlertDialog.Builder; 
import android.content.DialogInterface; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.preference.Preference; 
import android.preference.Preference.OnPreferenceClickListener; 
import android.preference.PreferenceActivity; 
import android.preference.PreferenceManager; 

public class Reset extends PreferenceActivity{ 

private Preference myPreference; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
addPreferencesFromResource(R.xml.preferences); 
myPreference = findPreference("reset"); 
myPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() { 
    public boolean onPreferenceClick(Preference arg0) { 
     Builder alertDialog = new AlertDialog.Builder(Reset.this); 
     alertDialog.setMessage("Reset?"); 
     alertDialog.setCancelable(true); 
     alertDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getBaseContext());       
       SharedPreferences.Editor editor = settings.edit(); 
       editor.clear(); 
       editor.commit(); 
      } }); 
     alertDialog.setNegativeButton("No", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       dialog.cancel(); 
      } }); 
     alertDialog.show(); 
     return false; 
    } 
}); 

} 

} 

而且記得要加你的活動:恢復清單:

0

使用.equals而不是==來比較對象。

if (preference.equals(myPrefernce)){ 

... 

} 
1

你缺少的關鍵線路

addPreferencesFromResource(R.xml.preferences); 

一旦你添加就可以工作了。

public class Reset extends PreferenceActivity { 

    private Preference myPreference; 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.preferences); 
     myPreference = findPreference("reset"); 
     myPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() { 

      public boolean onPreferenceClick(Preference arg0) { 
       Builder alertDialog = new AlertDialog.Builder(Reset.this); 
       alertDialog.setMessage("Reset?"); 
       alertDialog.setCancelable(true); 
       alertDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 
         SharedPreferences.Editor editor = settings.edit(); 
         editor.clear(); 
         editor.commit(); 
        } 
       }); 
       alertDialog.setNegativeButton("No", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         dialog.cancel(); 
        } 
       }); 
       alertDialog.show(); 
       return false; 
      } 
     }); 

    } 

} 
+0

這不起作用。 – Taha

+0

什麼是不工作,我可以在eclipse中運行這個確切的代碼,並獲得AlertDialog。你對Builder類有什麼輸入?它應該是AlertDialog.Builder – antew

+0

謝謝我解決了它。我把代碼放在名稱爲Reset的新類中,但它不起作用。然後我將其轉移到我的偏好班,現在它正在工作。 – Taha