鍍金池/ 問答/Android/ 請教一個RadioGroup和ViewPager對應的問題

請教一個RadioGroup和ViewPager對應的問題

請問如何點擊上面的RadioButton切換底部的ViewPager,或者滑動底部ViewPager的時候選中頂部的RadioButton
圖片描述

public class ChannelFragment extends Fragment {

    @BindView(R.id.rg_tabs)
    RadioGroup mRadioGroup;
    @BindView(R.id.vp_channel)
    ViewPager mViewPager;

    String[] topTitles = {"比賽", "解說", "專欄", "戰(zhàn)隊", "大神", "比賽", "解說", "專欄", "戰(zhàn)隊", "大神", "比賽", "解說", "專欄", "戰(zhàn)隊", "大神"};
    private List<ChannelListBean> mDatas;
    private ChannelAdapter mChannelAdapter;
    private ChannelItemAdapter mChannelItemAdapter;
    private List<TabController> mPageDatas;
    //記錄當前選中的tab
    private int mCurrentTab;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_channel, null);
        ButterKnife.bind(this, view);
        initData();
        initEvent();
        return view;
    }

    private void initData() {
            Bitmap a=null;
        //頂部按鈕
        for (int i = 0; i < topTitles.length; i++) {
            RadioButton tempButton = new RadioButton(getActivity());
            tempButton.setButtonDrawable(null);           // 設置按鈕的樣式
            tempButton.setText(topTitles[i]);
            tempButton.setButtonDrawable(new BitmapDrawable(a));
            tempButton.setPadding(30, 10, 30, 10);
            tempButton.setBackgroundResource(R.drawable.channel_title_selector);
            tempButton.setGravity(Gravity.CENTER);
            tempButton.setTextColor(R.drawable.channel_text_color_selector);
            RadioGroup.LayoutParams lp = new RadioGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT);
            lp.setMargins(15, 0, 15, 0);//設置RadioButton的邊距
            mRadioGroup.addView(tempButton, lp);
            if (i == 0) {
                mRadioGroup.check(tempButton.getId());
            }
        }

        mRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                // TODO 臨時選中
                final RadioButton tempButton = getActivity().findViewById(checkedId); // 通過RadioGroup的findViewById方法,找到ID為checkedID的RadioButton
                final CharSequence buttonText = tempButton.getText();
                mCurrentTab = checkedId;
                tempButton.setOnClickListener(new View.OnClickListener() {//獲取每一個RadioButton的點擊事件
                    @Override
                    public void onClick(View v) {
                        Toast.makeText(getActivity(), "點擊了" + tempButton.getText(), Toast.LENGTH_SHORT).show();
                        if (buttonText.equals("比賽")) {
                            mCurrentTab = 0;
                        } else if (buttonText.equals("解說")) {
                            mCurrentTab = 1;
                        }
                    }
                });
            }
        });

        mPageDatas = new ArrayList<>();

        //加載頁面數(shù)據(jù)
        mPageDatas = new ArrayList<>();
        mPageDatas.add(new GameController(getActivity()));//比賽
        mPageDatas.add(new CommentaryController(getActivity()));//比賽
        //給ViewPager設置Adapter

        mViewPager.setAdapter(new ContentPagerAdapter());
    }

    private void initEvent() {

    }

    /**
     * 整體ViewPager的Adapter
     */
    private class ContentPagerAdapter extends PagerAdapter {

        @Override
        public int getCount() {
            if (mPageDatas != null) {
                return mPageDatas.size();
            }
            return 0;
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == object;
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            BaseController controller = mPageDatas.get(position);
            View rootView = controller.getRootView();
            container.addView(rootView);
            controller.initData();
            return rootView;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View) object);
        }
    }
}
回答
編輯回答
清夢

viewpager有setCurrentItem,RadioGroup可以設置check

2018年4月17日 22:44
編輯回答
純妹
viewPager.setCurrentItem(position) // 設置當前選中的頁面,帶滑動動畫
viewPager.setCurrenItem(position,false); // 設置當前選中的頁面,不帶滑動動畫



viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset,
                                       int positionOffsetPixels) {}

            @Override
            public void onPageSelected(int position) {
                // ViewPager頁面被選中時觸發(fā) 在此更新頂部對應選中RadioButton 
            }

            @Override
            public void onPageScrollStateChanged(int state) {}
        });
2017年9月26日 09:59