package me.weyye.todaynews.ui.fragment; import android.content.DialogInterface; import android.support.v4.view.ViewPager; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import java.util.ArrayList; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; import me.weyye.todaynews.R; import me.weyye.todaynews.base.BaseFragment; import me.weyye.todaynews.base.BaseMvpFragment; import me.weyye.todaynews.listener.OnChannelListener; import me.weyye.todaynews.model.Channel; import me.weyye.todaynews.presenter.HomePresenter; import me.weyye.todaynews.theme.colorUi.util.SharedPreferencesMgr; import me.weyye.todaynews.ui.adapter.ChannelPagerAdapter; import me.weyye.todaynews.ui.view.ChannelDialogFragment; import me.weyye.todaynews.ui.view.colortrackview.ColorTrackTabLayout; import me.weyye.todaynews.utils.CommonUtil; import me.weyye.todaynews.utils.ConstanceValue; import me.weyye.todaynews.view.IHomeView; import static me.weyye.todaynews.utils.ConstanceValue.TITLE_SELECTED; import static me.weyye.todaynews.utils.ConstanceValue.TITLE_UNSELECTED; /** * Created by Administrator on 2016/11/17 0017. */ public class HomeFragment extends BaseMvpFragment<HomePresenter> implements IHomeView, OnChannelListener { @BindView(R.id.feed_top_search_hint) TextView feedTopSearchHint; @BindView(R.id.tab) ColorTrackTabLayout tab; @BindView(R.id.icon_category) ImageView iconCategory; @BindView(R.id.vp) ViewPager mVp; private ChannelPagerAdapter mTitlePagerAdapter; public List<Channel> mSelectedDatas = new ArrayList<>(); public List<Channel> mUnSelectedDatas = new ArrayList<>(); private List<BaseFragment> mFragments; private Gson mGson = new Gson(); @Override protected HomePresenter createPresenter() { return new HomePresenter(this); } @Override protected View loadViewLayout(LayoutInflater inflater, ViewGroup container) { return inflater.inflate(R.layout.fragment_home, null); } @Override protected void bindViews(View view) { ButterKnife.bind(this, rootView); } @Override protected void processLogic() { getTitleData(); mFragments = new ArrayList<>(); for (int i = 0; i < mSelectedDatas.size(); i++) { NewsListFragment fragment = NewsListFragment.newInstance(mSelectedDatas.get(i).TitleCode); mFragments.add(fragment); } mTitlePagerAdapter = new ChannelPagerAdapter(getChildFragmentManager(), mFragments, mSelectedDatas); mVp.setAdapter(mTitlePagerAdapter); mVp.setOffscreenPageLimit(mSelectedDatas.size()); tab.setTabPaddingLeftAndRight(CommonUtil.dip2px(10), CommonUtil.dip2px(10)); tab.setupWithViewPager(mVp); tab.post(new Runnable() { @Override public void run() { //设置最小宽度,使其可以在滑动一部分距离 ViewGroup slidingTabStrip = (ViewGroup) tab.getChildAt(0); slidingTabStrip.setMinimumWidth(slidingTabStrip.getMeasuredWidth() + iconCategory.getMeasuredWidth()); } }); //隐藏指示器 tab.setSelectedTabIndicatorHeight(0); } /** * 获取标题数据 */ private void getTitleData() { String selectTitle = SharedPreferencesMgr.getString(TITLE_SELECTED, ""); String unselectTitle = SharedPreferencesMgr.getString(TITLE_UNSELECTED, ""); if (TextUtils.isEmpty(selectTitle) || TextUtils.isEmpty(unselectTitle)) { //本地没有title String[] titleStr = getResources().getStringArray(R.array.home_title); String[] titlesCode = getResources().getStringArray(R.array.home_title_code); //默认添加了全部频道 for (int i = 0; i < titlesCode.length; i++) { String t = titleStr[i]; String code = titlesCode[i]; mSelectedDatas.add(new Channel(t, code)); } String selectedStr = mGson.toJson(mSelectedDatas); SharedPreferencesMgr.setString(TITLE_SELECTED, selectedStr); } else { //之前添加过 List<Channel> selecteData = mGson.fromJson(selectTitle, new TypeToken<List<Channel>>() { }.getType()); List<Channel> unselecteData = mGson.fromJson(unselectTitle, new TypeToken<List<Channel>>() { }.getType()); mSelectedDatas.addAll(selecteData); mUnSelectedDatas.addAll(unselecteData); } } @Override protected void setListener() { } @OnClick({R.id.feed_top_search_hint, R.id.icon_category}) public void onClick(View v) { switch (v.getId()) { case R.id.icon_category: ChannelDialogFragment dialogFragment = ChannelDialogFragment.newInstance(mSelectedDatas, mUnSelectedDatas); dialogFragment.setOnChannelListener(this); dialogFragment.show(getChildFragmentManager(), "CHANNEL"); dialogFragment.setOnDismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { mTitlePagerAdapter.notifyDataSetChanged(); mVp.setOffscreenPageLimit(mSelectedDatas.size()); tab.setCurrentItem(tab.getSelectedTabPosition()); ViewGroup slidingTabStrip = (ViewGroup) tab.getChildAt(0); //注意:因为最开始设置了最小宽度,所以重新测量宽度的时候一定要先将最小宽度设置为0 slidingTabStrip.setMinimumWidth(0); slidingTabStrip.measure(0, 0); slidingTabStrip.setMinimumWidth(slidingTabStrip.getMeasuredWidth() + iconCategory.getMeasuredWidth()); //保存选中和未选中的channel SharedPreferencesMgr.setString(ConstanceValue.TITLE_SELECTED, mGson.toJson(mSelectedDatas)); SharedPreferencesMgr.setString(ConstanceValue.TITLE_UNSELECTED, mGson.toJson(mUnSelectedDatas)); } }); break; } } @Override public void onItemMove(int starPos, int endPos) { listMove(mSelectedDatas, starPos, endPos); listMove(mFragments, starPos, endPos); } @Override public void onMoveToMyChannel(int starPos, int endPos) { //移动到我的频道 Channel channel = mUnSelectedDatas.remove(starPos); mSelectedDatas.add(endPos, channel); mFragments.add(NewsListFragment.newInstance(channel.TitleCode)); } @Override public void onMoveToOtherChannel(int starPos, int endPos) { //移动到推荐频道 mUnSelectedDatas.add(endPos, mSelectedDatas.remove(starPos)); mFragments.remove(starPos); } private void listMove(List datas, int starPos, int endPos) { Object o = datas.get(starPos); //先删除之前的位置 datas.remove(starPos); //添加到现在的位置 datas.add(endPos, o); } }