2010-08-25 20 views
10

Vì vậy, trong một số trạng thái nhất định trong ứng dụng của tôi, tôi muốn vô hiệu hóa một số CheckBoxPreferences nhất định trong menu cài đặt của mình. Tuy nhiên, nếu người dùng nhấp vào chúng, tôi muốn hiển thị bánh mì nướng giải thích. Nếu tôi chỉ làm setEnable (false); trên CheckBoxPreference, tôi có được giao diện phù hợp. Nhưng tôi không thể có được một bánh mì nướng được hiển thị trên nhấp chuột. Mặt khác, tôi đã thất bại trong việc tạo một CheckBoxPreference theo cách thủ công giống như nó bị vô hiệu hóa.Làm cho giao diện người dùng bị tắt nhưng vẫn đăng ký số nhấp chuột

Trả lời

18

Thay vì tắt tùy chọn, bạn cũng có thể vô hiệu hóa chế độ xem chỉ tùy chọn.

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

giải pháp sáng tạo và gọn gàng, cảm ơn bạn! – pgsandstrom

0

Thậm chí nếu sở thích của bạn bị vô hiệu hóa, bạn có thể nhận 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; 
    } 

    ... 
} 
Các vấn đề liên quan