2013-06-24 44 views
0

我有一个偏好片段,我在此调用setOnClickListener()作为偏好,并覆盖onPreferenceClick()方法。但是,当单击首选项时,我的新方法不会被调用。Android OnPreferenceClick不会在点击时调用

我可以通过将代码移动到我自定义的EditTextPreference类中来获得ClickListener的工作方式,但必须启用首选项才能激发侦听器。

我想使用此首选项作为标签来显示值并单击它以显示选项以更改它。我不希望用户直接编辑它。

我该如何做到这一点?

代码是如下

public class PrefActivity extends PreferenceActivity { 

    static final String TAG="Preference Activity"; 

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


    @Override 
    protected void onStop() { 
     // TODO Auto-generated method stub 
     super.onStop(); 
    } 


    public static class MyPreferenceFragment extends PreferenceFragment 
    { 
     @Override 
     public void onCreate(final Bundle savedInstanceState) 
     { 
      super.onCreate(savedInstanceState); 
      addPreferencesFromResource(R.xml.preferences); 
      Preference clickedPreference = (Preference) findPreference("userLocation"); 
      clickedPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() { 

       @Override 
       public boolean onPreferenceClick(Preference preference) { 
        // TODO Auto-generated method stub 
        SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(preference.getContext()); 
        boolean locationTypeSetting; 
        LocationSetting locationSetting = new LocationSetting(preference.getContext()); 
        String clickedPreference = preference.getKey(); 

        if (clickedPreference.equals("userLocation")){ 
         locationTypeSetting = settings.getBoolean("locationSetting", false); 
         if (locationTypeSetting == true) 
         { 
          AlertDialog.Builder noEditDialogBuilder = new AlertDialog.Builder(preference.getContext()); 
          noEditDialogBuilder.setTitle(R.string.no_edit_dialog_title); 
          noEditDialogBuilder 
          .setMessage(R.string.no_edit_dialog_message) 
          .setPositiveButton(R.string.no_edit_dialog_positive_action,null); 
          AlertDialog noEditDialog = noEditDialogBuilder.create(); 
          noEditDialog.show(); 
         } 
         else 
          locationSetting.displayMap(0); 
        } 

        return false; 
          } 

         }); 
        } 

       } 
    } 

我的偏好XML

<SwitchPreference 
    android:defaultValue="0" 
    android:key="locationSetting" 
    android:summary="Automatic Location" 
    android:switchTextOff="OFF" 
    android:switchTextOn="ON" /> 

<com.example.test.EditTextPreferenceWithSummary 
    android:key="userLocation" 
    android:title="Address" 
    android:shouldDisableView="false" 
    android:enabled="false" 
    android:selectable="true" /> 

我EditTextPreferenceWithSummary类

public class EditTextPreferenceWithSummary extends EditTextPreference { 
    private final static String TAG = EditTextPreferenceWithSummary.class.getName(); 

    @Override 
    protected View onCreateView(ViewGroup parent) { 
     this.setSummary(this.getText()); 
     return super.onCreateView(parent); 
    } 

    public EditTextPreferenceWithSummary(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(); 
    } 

    public EditTextPreferenceWithSummary(Context context) { 
     super(context); 
     init(); 
    } 

    private void init() { 
     Log.e(TAG, "init"); 
     SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this.getContext());  
     String currentText = prefs.getString("userLocation", this.getText()); 


     this.setSummary(currentText); 

     setOnPreferenceChangeListener(new OnPreferenceChangeListener() { 

      @Override 
      public boolean onPreferenceChange(Preference preference, Object newValue) { 
       preference.setSummary(newValue.toString()); 
       return true; 
      } 
     }); 
    } 
} 

我删除了片段,并直接使用类。还是同样的问题

代码是如下

public class PrefActivity extends PreferenceActivity { 

    static final String TAG="Preference Activity"; 

    @SuppressWarnings("deprecation") 
    @Override 
    public void onCreate(final Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.preferences); 
     Preference clickedPreference = (Preference) findPreference("userLocation"); 
     clickedPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() { 

      @Override 
      public boolean onPreferenceClick(Preference preference) { 
       // TODO Auto-generated method stub 
       SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(preference.getContext()); 
       boolean locationTypeSetting; 
       LocationSetting locationSetting = new LocationSetting(preference.getContext()); 
       String clickedPreference = preference.getKey(); 

       if (clickedPreference == "userLocation"){ 
        locationTypeSetting = settings.getBoolean("locationSetting", false); 
        if (locationTypeSetting == true) 
        { 
         AlertDialog.Builder noEditDialogBuilder = new AlertDialog.Builder(preference.getContext()); 
         noEditDialogBuilder.setTitle(R.string.no_edit_dialog_title); 
         noEditDialogBuilder 
         .setMessage(R.string.no_edit_dialog_message) 
         .setPositiveButton(R.string.no_edit_dialog_positive_action,null); 
         AlertDialog noEditDialog = noEditDialogBuilder.create(); 
         noEditDialog.show(); 
        } 
        else 
         locationSetting.displayMap(0); 
       } 

       return false; 
         } 

        }); 
       } 



    @Override 
    protected void onStop() { 
     // TODO Auto-generated method stub 
     super.onStop(); 

    } 
} 
+0

标记为非建设性的,因为,除非你有一个问题,你应该看看[Android的参考](http://developer.android.com/reference/android/preference/PreferenceFragment.html) – verybadalloc

+1

我有一个问题,这就是为什么我问我的问题。我不理解评论。 – user2516536

+0

欢迎来到Stack Overflow。不幸的是,您没有提供足够的信息来帮助我们。请阅读[这些建议](http://stackoverflow.com/help/how-to-ask)以改善您的问题。您提出的问题越多,您就越有可能提供您正在寻找的答案。 –

回答

0

试试这个,这将帮助你

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

我正在做类似的东西,但我有一个preferencefragment。我在片段中完成了所有这些工作,并且在活动中创建了片段。不幸的是,它不起作用:-( – user2516536

相关问题