/* * Copyright (C) 2013 FMSoft (http://www.fmsoft.cn) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.espier.ios7.ui.widget; import java.util.HashMap; import org.espier.ios7.ui.widget.SegmentedPage.OnSegmentedPageDataChangedListener; import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.widget.FrameLayout; import android.widget.RadioGroup; import android.widget.RadioGroup.OnCheckedChangeListener; public class SegmentedPageGroup extends FrameLayout { private RadioGroup mRadioGroup; private OnPageShownListener mPageShowListener; private View mSelectedPage; private View mDefaultSelectedPage; private HashMap<Integer, Integer> mData = new HashMap<Integer, Integer>(); private OnSegmentedPageDataChangedListener mSegmentedPageDataChangedListener; public interface OnPageShownListener { void pageShown(View page); } public SegmentedPageGroup(Context context) { super(context); init(context, null, 0); } public SegmentedPageGroup(Context context, AttributeSet attr) { this(context, attr, 0); } public SegmentedPageGroup(Context context, AttributeSet attr, int defStyle) { super(context, attr, defStyle); init(context, attr, defStyle); } private void init(Context context, AttributeSet attr, int defStyle) { int count = getChildCount(); for (int i = 0; i < count; i++) { View v = getChildAt(i); v.setVisibility(View.INVISIBLE); } } public void setOnSegmentedPageDataChangedListener( OnSegmentedPageDataChangedListener listener) { mSegmentedPageDataChangedListener = listener; int count = getChildCount(); for (int i = 0; i < count; i++) { View v = getChildAt(i); if (v instanceof SegmentedPage) { ((SegmentedPage) v) .setOnSegmentedPageDataChangedListener(listener); } } } public OnSegmentedPageDataChangedListener getOnSegmentedPageDataChangedListener() { return mSegmentedPageDataChangedListener; } public void setOnPageShownListener(OnPageShownListener listener) { mPageShowListener = listener; } public OnPageShownListener getOnPageShownListener() { return mPageShowListener; } private void attachRadioButton(int[] radioButton, int[] page) { if (radioButton.length != page.length) { throw new RuntimeException(); } for (int i = 0; i < radioButton.length; i++) { mData.put(radioButton[i], page[i]); } } /** * set RadioGroup to SegmentedPageGroup * * @param group * RadioGroup * @param radioButton * Id of Buttons of radio group * @param page * Id of pages of SegmentedPageGroup */ public void setRadioGroup(RadioGroup group, int[] radioButton, int[] page) { if (group == null) { throw new NullPointerException(); } attachRadioButton(radioButton, page); mRadioGroup = group; mRadioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { if (group == mRadioGroup) { showPageById(mData.get(checkedId)); } } }); mDefaultSelectedPage = getChildAt(0); int checkedBtnId = mRadioGroup.getCheckedRadioButtonId(); if (checkedBtnId != 0) { Integer pageId = mData.get(checkedBtnId); if (pageId == null) { mSelectedPage = mDefaultSelectedPage; } else { mSelectedPage = findViewById(pageId); } } else { mSelectedPage = mDefaultSelectedPage; } showPageById(mSelectedPage.getId()); } private void showPageById(int pageId) { int count = getChildCount(); for (int i = 0; i < count; i++) { View v = getChildAt(i); if (v.getId() == pageId) { v.setVisibility(View.VISIBLE); if (mPageShowListener != null) { mPageShowListener.pageShown(v); } } else { v.setVisibility(View.INVISIBLE); } } } public View getSelectedPage() { return mSelectedPage; } }