2010-08-25 27 views
10

पर क्लिक करें, इसलिए मेरे ऐप में कुछ राज्यों के दौरान, मैं अपने सेटिंग-मेनू में कुछ चेकबॉक्स प्राथमिकताओं को अक्षम करना चाहता हूं। हालांकि, यदि उपयोगकर्ता उन्हें क्लिक करता है, तो मैं एक स्पष्टीकरण टोस्ट दिखाना चाहता हूं। अगर मैं बस सेट (सक्षम) सेट करता हूं; चेकबॉक्स प्रेफरेंस पर, मुझे सही दिखने और महसूस होता है। लेकिन मैं क्लिक पर दिखाने के लिए एक टोस्ट नहीं मिल सकता है। दूसरी तरफ, मैं मैन्युअल रूप से चेकबॉक्स को संदर्भित करने में विफल रहा हूं जैसे यह अक्षम है।वरीयता को अक्षम करें, लेकिन अभी भी

उत्तर

18

वरीयता को अक्षम करने के बजाय, आप वरीयता के विचारों को भी अक्षम कर सकते हैं।

public class DisabledAppearanceCheckboxPreference extends CheckBoxPreference { 

     protected boolean mEnabledAppearance = false; 

     public DisabledAppearanceCheckboxPreference(Context context, 
       AttributeSet attrs) { 
      super(context, attrs); 

     } 
    @Override 
    protected void onBindView(View view) { 
     super.onBindView(view); 
     boolean viewEnabled = isEnabled()&&mEnabledAppearance; 
     enableView(view, viewEnabled); 
    } 

    protected void enableView(View view, boolean enabled){ 
     view.setEnabled(enabled); 
     if (view instanceof ViewGroup){ 
      ViewGroup grp = (ViewGroup)view; 
      for (int index = 0; index < grp.getChildCount(); index++) 
       enableView(grp.getChildAt(index), enabled); 
     } 
    } 
    public void setEnabledAppearance(boolean enabled){ 
     mEnabledAppearance = enabled; 
     notifyChanged(); 
    } 
    @Override 
    protected void onClick() { 
     if (mEnabledAppearance) 
      super.onClick(); 
     else{ 
      // show your toast here 
     } 
    } 

} 
+0

रचनात्मक और स्वच्छ समाधान, धन्यवाद! – pgsandstrom

0

यहां तक ​​कि अगर आपके वरीयता अक्षम होती है, तो आप OnTouchEvents प्राप्त कर सकते हैं:

public class MyPreferenceFragment extends PreferenceFragment { 

    ... 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     View view = super.onCreateView(inflater, container, savedInstanceState); 
     final ListView listView = (ListView) view.findViewById(android.R.id.list); 

     listView.setOnTouchListener(new OnTouchListener() { 

      @Override 
      public boolean onTouch(View view, MotionEvent event) { 

       int position = listView.pointToPosition((int) event.getX(), (int) event.getY()); 
       ListAdapter adapter = listView.getAdapter(); 
       Preference preference = (Preference) adapter.getItem(position); 

       if (!preference.isEnabled()) 
        Toast.makeText(getActivity(), "Sorry, this setting is not available!", Toast.LENGTH_LONG).show(); 

       return false; 
      } 
     }); 


     return view; 
    } 

    ... 
} 
संबंधित मुद्दे