package com.ly.supermvp.view.fragment;
import android.content.Intent;
import android.view.View;
import com.ly.supermvp.R;
import com.ly.supermvp.adapter.NewsListAdapter;
import com.ly.supermvp.delegate.NewsFragmentDelegate;
import com.ly.supermvp.delegate.SwipeRefreshAndLoadMoreCallBack;
import com.ly.supermvp.model.OnNetRequestListener;
import com.ly.supermvp.model.news.NewsBody;
import com.ly.supermvp.model.news.NewsModel;
import com.ly.supermvp.model.news.NewsModelImpl;
import com.ly.supermvp.mvp_frame.presenter.FragmentPresenter;
import com.ly.supermvp.view.activity.NewsDetailActivity;
import java.util.ArrayList;
import java.util.List;
/**
* <Pre>
* 新闻fragment
* </Pre>
*
* @author 刘阳
* @version 1.0
* <p/>
* Create by 2016/1/27 11:04
* @see https://github.com/liuyanggithub/SuperMvp
*/
public class NewsFragment extends FragmentPresenter<NewsFragmentDelegate> implements SwipeRefreshAndLoadMoreCallBack {
private NewsModel mNewsModel;
private int mPageNum = 1;
private NewsListAdapter mAdapter;
//新闻数据列表
private List<NewsBody> mNews = new ArrayList<>();
// private CompositeSubscription compositeSubscription = new CompositeSubscription();
public static NewsFragment newInstance() {
NewsFragment fragment = new NewsFragment();
return fragment;
}
@Override
protected Class<NewsFragmentDelegate> getDelegateClass() {
return NewsFragmentDelegate.class;
}
@Override
protected void initData() {
super.initData();
mNewsModel = new NewsModelImpl();
mAdapter = new NewsListAdapter(getActivity(), mNews);
viewDelegate.setListAdapter(mAdapter);
mAdapter.setOnItemClickListener(new NewsListAdapter.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
NewsBody item = mNews.get(position);
Intent intent = new Intent(getActivity(), NewsDetailActivity.class);
if((item.imageurls != null && item.imageurls.size() > 0)) {
intent.putExtra(NewsDetailActivity.ARG_NEWS_PIC, item.imageurls.get(0).url);
}
intent.putExtra(NewsDetailActivity.ARG_NEWS_URL, item.link);
intent.putExtra(NewsDetailActivity.ARG_NEWS_TITLE, item.title);
startActivity(intent);
}
});
//注册下拉刷新
viewDelegate.registerSwipeRefreshCallBack(this);
//注册加载更多
viewDelegate.registerLoadMoreCallBack(this, mAdapter);
netNewsList(true);
}
/**
* 从网络加载数据列表
* @param isRefresh 是否刷新
*/
private void netNewsList(final boolean isRefresh) {
// viewDelegate.showLoading();
if(isRefresh){
mPageNum = 1;
}else {
mPageNum++;
}
mNewsModel.netLoadNewsList(mPageNum, NewsModelImpl.CHANNEL_ID, NewsModelImpl.CHANNEL_NAME, new OnNetRequestListener<List<NewsBody>>() {
@Override
public void onStart() {
}
@Override
public void onFinish() {
}
@Override
public void onSuccess(List<NewsBody> list) {
viewDelegate.showContent();
if(isRefresh) {
if(!mNews.isEmpty()){
mNews.clear();
}
}
mNews.addAll(list);
mAdapter.notifyDataSetChanged();
}
@Override
public void onFailure(Throwable t) {
viewDelegate.showError(R.string.load_error, new View.OnClickListener() {
@Override
public void onClick(View v) {
netNewsList(true);
}
});
}
});
}
@Override
protected void initView() {
super.initView();
}
/**
* 下拉刷新
*/
@Override
public void refresh() {
netNewsList(true);
}
/**
* 加载更多
*/
@Override
public void loadMore() {
netNewsList(false);
}
}