2012-11-13 2 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'는 null이고 여러분은 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

그것에 대해 작동하지 않는 무엇이,이 정확한 코드를 이클립스에서 실행할 수 및 AlertDialog 얻이 수 있습니다. Builder 클래스에 대한 가져 오기는 무엇입니까? AlertDialog.Builder가되어야합니다 – antew

+0

고마워. 내가 해결 했어. 새 클래스에 이름 재설정 코드를 넣었지만 작동하지 않습니다. 그럼 내가 선호하는 클래스로 옮기면 이제는 효과가있다. – Taha

관련 문제