RobertApikyan / SegmentedControl

Android SegmentedControl + multi row support
Apache License 2.0
162 stars 30 forks source link

Disable the segmented control #7

Closed amrboxit4me closed 6 years ago

amrboxit4me commented 6 years ago

I disabled the segment by setEnable(false) but it doesn't work So I used the following code but it is better to make disable feature

    private void disableEnableControls(boolean enable, ViewGroup vg) {
        for (int i = 0; i < vg.getChildCount(); i++) {
            View child = vg.getChildAt(i);
            child.setEnabled(enable);
            if (child instanceof ViewGroup) {
                disableEnableControls(enable, (ViewGroup) child);
            }
        }
    }
RobertApikyan commented 6 years ago

You want to disable segment selection, right ?

RobertApikyan commented 6 years ago

If it's true, than here is the example how to disable segment... Disable selection for segment with position 3. Add OnSegmentSelectListener and control the segment selection.

segmentedControl.addOnSegmentSelectListener(new OnSegmentSelectedListener<String>() {
            @Override
            public void onSegmentSelected(SegmentViewHolder<String> segmentViewHolder, boolean isSelected, boolean isReselected) {
                if (segmentViewHolder.getAbsolutePosition() == 3){  // disable segment 3 
                    segmentViewHolder.onSegmentSelected(false,false);
                }
            }
        });
RobertApikyan commented 6 years ago

Disable all segments

    segmentedControl.addOnSegmentSelectListener(new OnSegmentSelectedListener<String>() {
            @Override
            public void onSegmentSelected(SegmentViewHolder<String> segmentViewHolder, boolean isSelected, boolean isReselected) {
                segmentViewHolder.onSegmentSelected(false,false);
            }
        });
RobertApikyan commented 6 years ago

Let me close the issue, but fill free to reopen it, if you have any questions

lavatechdev commented 4 years ago

That doesn't solve the problem as view is still clickable. What if you would like to disable possibility of clicking any segment and keep selection as it was before disabling segmentedControl?

fefereliezer commented 3 years ago

Call this function to disable

public static void disableSegmentedControl(View view) {
        if ((view != null)) {
            view.setClickable(false);
            view.setLongClickable(false);
        }
        if (view instanceof ViewGroup) {
            for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
                View innerView = ((ViewGroup) view).getChildAt(i);
                disableSegmentedControl(innerView);
            }
        }
    }