代码之家  ›  专栏  ›  技术社区  ›  pgsandstrom

使首选项看起来已禁用,但仍然注册单击

  •  10
  • pgsandstrom  · 技术社区  · 16 年前

    2 回复  |  直到 16 年前
        1
  •  18
  •   Thorstenvv    16 年前

    与其禁用首选项,不如仅禁用首选项的视图。

    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
            }
        }
    
    }
    
        2
  •  0
  •   almisoft    9 年前

    即使您的首选项被禁用,您也可以接收到以下事件:

        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;
        }
    
        ...
    }