package com.example.yuan_wanandroid.view.home; import android.app.ActivityOptions; import android.content.Intent; import android.os.Build; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.Pair; import android.view.LayoutInflater; import android.view.View; import android.widget.EditText; import android.widget.ImageView; import android.widget.RelativeLayout; import com.example.yuan_wanandroid.R; import com.example.yuan_wanandroid.adapter.ArticlesAdapter; import com.example.yuan_wanandroid.app.App; import com.example.yuan_wanandroid.app.Constant; import com.example.yuan_wanandroid.app.User; import com.example.yuan_wanandroid.base.fragment.BaseLoadingFragment; import com.example.yuan_wanandroid.contract.home.HomeFragmentContract; import com.example.yuan_wanandroid.di.module.fragment.HomeFragmentModule; import com.example.yuan_wanandroid.model.entity.Article; import com.example.yuan_wanandroid.model.entity.BannerData; import com.example.yuan_wanandroid.presenter.home.HomeFragmentPresenter; import com.example.yuan_wanandroid.utils.BannerImageLoader; import com.example.yuan_wanandroid.utils.CommonUtils; import com.example.yuan_wanandroid.utils.LogUtil; import com.example.yuan_wanandroid.utils.StatusBarUtil; import com.example.yuan_wanandroid.view.MainActivity; import com.example.yuan_wanandroid.view.person.LoginActivity; import com.example.yuan_wanandroid.view.search.SearchActivity; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.youth.banner.Banner; import com.youth.banner.BannerConfig; import com.youth.banner.Transformer; import java.util.List; import javax.inject.Inject; import javax.inject.Named; import butterknife.BindView; import static android.app.Activity.RESULT_OK; /** * <pre> * author : 残渊 * time : 2019/01/21 * desc : 首页 * </pre> */ public class HomeFragment extends BaseLoadingFragment<HomeFragmentPresenter> implements HomeFragmentContract.View { private static final String TAG = "HomeFragment"; @Inject HomeFragmentPresenter mPresenter; @Inject @Named("bannerTitles") List<String> bannerTitles; @Inject @Named("bannerImages") List<String> bannerImages; @Inject @Named("bannerUrls") List<String> bannerUrls; @Inject LinearLayoutManager mLinearLayoutManager; @Inject List<Article> mArticleList; @Inject ArticlesAdapter mArticlesAdapter; @BindView(R.id.recyclerView) RecyclerView mRecyclerView; @BindView(R.id.normalView) SmartRefreshLayout mRefreshLayout; @BindView(R.id.statusBarView) View view; @BindView(R.id.searchTv) EditText mSearchTv; @BindView(R.id.searchIv) ImageView mSearchIv; @BindView(R.id.searchRelative) RelativeLayout mSearchRelative; private Banner banner; private int mPageNum = 0;//首页文章页数 private boolean isRefresh = false; //是否在上拉刷新 private int mArticlesPosition = 0;//文章的序号 @Override protected int getLayoutId() { return R.layout.fragment_nav_home; } @Override protected void initView() { super.initView(); StatusBarUtil.addStatusBarView(mActivity, view); initRecyclerView(); initRefreshView(); mSearchTv.setOnClickListener(v -> toSearchActivity()); } private void initRecyclerView() { //添加轮播图到RecyclerView的Header View bannerLayout = LayoutInflater.from(mActivity).inflate(R.layout.banner_layout, null); banner = bannerLayout.findViewById(R.id.banner); mRecyclerView.setLayoutManager(mLinearLayoutManager); mArticlesAdapter.openLoadAnimation(); mArticlesAdapter.addHeaderView(bannerLayout); mRecyclerView.setAdapter(mArticlesAdapter); //文章点击效果 mArticlesAdapter.setOnItemClickListener(((adapter, view, position) -> { mArticlesPosition = position; ArticleActivity.startActivityForResultByFragment(mActivity, this, mArticleList.get(position).getLink(), mArticleList.get(position).getTitle(), mArticleList.get(position).getId(), mArticleList.get(position).isCollect(), Constant.REQUEST_ARTICLE_ACTIVITY); })); //文章收藏 mArticlesAdapter.setOnItemChildClickListener((adapter, view, position) -> { mArticlesPosition = position; if (!User.getInstance().isLoginStatus()) { showToast(getString(R.string.first_login)); startActivity(new Intent(mActivity, LoginActivity.class)); } else { collect(); CommonUtils.collectAnimator(mActivity, view); } } ); } private void initRefreshView() { mRefreshLayout.setOnLoadMoreListener(refreshLayout -> { mPageNum++; isRefresh = false; mPresenter.loadMoreArticles(mPageNum); }); mRefreshLayout.setOnRefreshListener(refreshLayout -> { if (!CommonUtils.isNetworkConnected(App.getContext())) { refreshLayout.finishRefresh(); CommonUtils.toastShow("网络不可用"); } else { mPageNum = 0; isRefresh = true; mPresenter.loadMoreArticles(mPageNum); } }); } @Override protected void inject() { ((MainActivity) getActivity()) .getComponent() .getHomeFragmentComponent(new HomeFragmentModule()) .inject(this); } @Override protected HomeFragmentPresenter getPresenter() { return mPresenter; } @Override protected void loadData() { mPresenter.loadBannerData(); mPresenter.loadArticles(0); mPresenter.subscribeEvent(); } @Override public void reLoad() { super.reLoad(); mPresenter.loadBannerData(); mPresenter.loadArticles(0); mPresenter.subscribeEvent(); } @Override public void showToast(String msg) { CommonUtils.toastShow(msg); } @Override public void showBannerData(List<BannerData> bannerDataList) { if (!CommonUtils.isEmptyList(bannerTitles)) { bannerTitles.clear(); bannerImages.clear(); bannerUrls.clear(); } //获得标题,图片 for (BannerData bannerData : bannerDataList) { bannerTitles.add(bannerData.getTitle()); bannerImages.add(bannerData.getImagePath()); bannerUrls.add(bannerData.getUrl()); } //设置banner banner.setImageLoader(new BannerImageLoader()) .setBannerStyle(BannerConfig.CIRCLE_INDICATOR_TITLE_INSIDE)//显示圆形指示器和标题(水平显示) .setImages(bannerImages)//设置图片集合 .setBannerAnimation(Transformer.Default)//设置轮播动画 .setBannerTitles(bannerTitles)//设置标题集合 .setIndicatorGravity(BannerConfig.RIGHT)//设置指示器位置,右边 .setDelayTime(3000)//设置轮播事件间隔 .setOnBannerListener(position -> { ArticleActivity.startActivityByFragment(mActivity, this, bannerUrls.get(position), bannerTitles.get(position)); })//点击事件 .start(); } @Override public void showArticles(List<Article> articlesList) { LogUtil.d(LogUtil.TAG_COMMON, articlesList.get(0).getUserId() + ""); if (!CommonUtils.isEmptyList(mArticleList)) { mArticleList.clear(); } mArticleList.addAll(articlesList); mArticlesAdapter.notifyDataSetChanged(); } @Override public void showMoreArticles(List<Article> articleList) { if (isRefresh) { if (!CommonUtils.isEmptyList(mArticleList)) { mArticleList.clear(); } mRefreshLayout.finishRefresh(); } else { if (CommonUtils.isEmptyList(articleList)) { mRefreshLayout.finishLoadMoreWithNoMoreData(); } else { mRefreshLayout.finishLoadMore(1000); } } mArticleList.addAll(articleList); mArticlesAdapter.notifyDataSetChanged(); } @Override public void showCollectSuccess() { showToast(getString(R.string.collect_success)); mArticleList.get(mArticlesPosition).setCollect(true); mArticlesAdapter.notifyItemChanged(mArticlesPosition + mArticlesAdapter.getHeaderLayoutCount()); } @Override public void showUnCollectSuccess() { showToast(getString(R.string.uncollect_success)); mArticleList.get(mArticlesPosition).setCollect(false); mArticlesAdapter.notifyItemChanged(mArticlesPosition + mArticlesAdapter.getHeaderLayoutCount()); } @Override public void autoRefresh() { mRefreshLayout.autoRefresh(); mPresenter.loadBannerData(); } @Override public void collect() { if (mArticleList.get(mArticlesPosition).isCollect()) { mPresenter.unCollectArticles(mArticleList.get(mArticlesPosition).getId()); } else { mPresenter.collectArticles(mArticleList.get(mArticlesPosition).getId()); } } @Override public void onStart() { super.onStart(); if (banner != null) { banner.startAutoPlay(); } } @Override public void onStop() { super.onStop(); if (banner != null) { banner.stopAutoPlay(); } } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode != RESULT_OK) return; Article article = mArticleList.get(mArticlesPosition); switch (requestCode) { case Constant.REQUEST_ARTICLE_ACTIVITY: boolean isCollect = data.getBooleanExtra(Constant.KEY_ARTICLE_COLLECT, false); if (isCollect != article.isCollect()) { article.setCollect(isCollect); mArticlesAdapter.notifyItemChanged(mArticlesPosition + mArticlesAdapter.getHeaderLayoutCount()); } break; default: break; } } private void toSearchActivity() { Intent intent = new Intent(mActivity, SearchActivity.class); //适配5.0以下的机型 if (Build.VERSION.SDK_INT >= 21) { ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(mActivity, Pair.create(mSearchTv, getString(R.string.share_edit)), Pair.create(mSearchIv, getString(R.string.share_image)) ); startActivity(intent, options.toBundle()); }else{ startActivity(intent); } } }