package com.yeshi.ec.library_baiducpu.fragment;
|
|
import android.graphics.Canvas;
|
import android.graphics.Rect;
|
import android.os.Bundle;
|
|
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
import androidx.recyclerview.widget.GridLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.RecyclerView;
|
|
import android.util.Log;
|
import android.view.View;
|
import android.view.ViewGroup;
|
import android.widget.ProgressBar;
|
|
import com.baidu.mobad.feeds.RequestParameters;
|
import com.baidu.mobads.nativecpu.CPUAdRequest;
|
import com.baidu.mobads.nativecpu.CpuLpFontSize;
|
import com.baidu.mobads.nativecpu.IBasicCPUData;
|
import com.baidu.mobads.nativecpu.NativeCPUManager;
|
import com.lcjian.library.RetainViewFragment;
|
import com.lcjian.library.util.common.DimenUtils;
|
import com.ut.device.UTDevice;
|
import com.yeshi.ec.library_baiducpu.R;
|
import com.yeshi.ec.library_baiducpu.adapter.BaiduCPUContentAdapter;
|
import com.yeshi.ec.library_baiducpu.entity.BaiDuCPUType;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
|
/**
|
* 百度资讯
|
*/
|
public class BaiDuCPUContentFragment extends RetainViewFragment implements NativeCPUManager.CPUAdListener {
|
|
public final static int VIEW_TYPE_NEWS = 1;
|
public final static int VIEW_TYPE_SMALLVIDEO = 2;
|
public final static int VIEW_TYPE_VIDEO = 3;
|
|
private final String YOUR_APP_ID = "fc4e132a"; // 双引号中填写自己的APPSID
|
private List<IBasicCPUData> nrAdList = new ArrayList<IBasicCPUData>();
|
private NativeCPUManager mCpuManager;
|
private int mChannelId = 1001; // 默认娱乐频道
|
private SwipeRefreshLayout srl_news;
|
private RecyclerView rv_news;
|
private int currentPage = 1;//目前的界面
|
|
private boolean isLoad;
|
|
private BaiduCPUContentAdapter adapter;
|
|
private final static String TAG = "BaiDuNewsContent";
|
|
private ProgressBar footerView;
|
|
private int viewType;
|
|
|
public static BaiDuCPUContentFragment newInstance(BaiDuCPUType spinnerItem, int viewType) {
|
BaiDuCPUContentFragment fragment = new BaiDuCPUContentFragment();
|
Bundle bundle = new Bundle();
|
bundle.putSerializable("item", spinnerItem);
|
bundle.putInt("viewType", viewType);
|
fragment.setArguments(bundle);
|
return fragment;
|
}
|
|
@Override
|
public int getContentResource() {
|
return R.layout.fragment_baidu_news_content;
|
}
|
|
private void initView(View contentView) {
|
srl_news = contentView.findViewById(R.id.srl_news);
|
rv_news = contentView.findViewById(R.id.rv_news);
|
|
rv_news.addOnScrollListener(new RecyclerView.OnScrollListener() {
|
@Override
|
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
|
super.onScrollStateChanged(recyclerView, newState);
|
LinearLayoutManager manager = (LinearLayoutManager) recyclerView.getLayoutManager();
|
int first = manager.findFirstVisibleItemPosition();
|
int last = manager.findLastVisibleItemPosition();
|
int total = manager.getItemCount();
|
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
|
if ((!isLoad) && last == total - 1 && nrAdList.size() < 1000) {
|
if (nrAdList != null && nrAdList.size() > 0 && !srl_news.isRefreshing()) {//列表中有数据才能加载更多
|
currentPage++;
|
isLoad = true;
|
if (nrAdList != null && nrAdList.size() > 0)
|
footerView.setVisibility(View.VISIBLE);
|
else
|
footerView.setVisibility(View.GONE);
|
loadAd(currentPage);
|
}
|
}
|
}
|
}
|
|
@Override
|
public void onScrolled(RecyclerView recyclerView, int dx, final int dy) {
|
super.onScrolled(recyclerView, dx, dy);
|
}
|
});
|
|
footerView = new ProgressBar(getContext());
|
ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
|
footerView.setLayoutParams(params);
|
// int padding = DimenUtils.dip2px(getContext(), 10);
|
// footerView.setPadding(padding, padding, padding, padding);
|
}
|
|
RecyclerView.ItemDecoration itemDecoration2 = new RecyclerView.ItemDecoration() {
|
@Override
|
public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
|
super.onDraw(c, parent, state);
|
}
|
|
@Override
|
public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {
|
super.onDrawOver(c, parent, state);
|
}
|
|
@Override
|
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
|
super.getItemOffsets(outRect, view, parent, state);
|
int index = parent.getChildAdapterPosition(view);
|
int total = parent.getAdapter().getItemCount();
|
int minWidth = DimenUtils.dipToPixels(2, view.getContext());
|
if (index % 2 == 0) {
|
outRect.left = 0; //第一列左边贴边
|
outRect.right = minWidth;
|
} else {
|
outRect.right = 0; //第一列左边贴边
|
outRect.left = minWidth;
|
}
|
|
if (index - 1 > 0) {
|
outRect.top = minWidth;
|
} else
|
outRect.top = 0;
|
|
if (total % 2 == 0) {
|
if (total > 2 && (index < total - 2))
|
outRect.bottom = minWidth;
|
else
|
outRect.bottom = 0;
|
} else {
|
if (total > 2 && (index < total - 1))
|
outRect.bottom = minWidth;
|
else
|
outRect.bottom = 0;
|
}
|
}
|
};
|
|
|
private void initData() {
|
Bundle bundle = getArguments();
|
BaiDuCPUType item = (BaiDuCPUType) bundle.getSerializable("item");
|
if (item == null)
|
return;
|
viewType = bundle.getInt("viewType");
|
bundle.clear();
|
mChannelId = item.getId();
|
|
mCpuManager = new NativeCPUManager(getContext(), YOUR_APP_ID, this);
|
/**
|
* 可选设置: 设置暗黑模式或调整内容详情页的字体大小
|
*/
|
mCpuManager.setLpFontSize(CpuLpFontSize.SMALL);
|
mCpuManager.setLpDarkMode(true);
|
adapter = new BaiduCPUContentAdapter(getContext(), viewType, nrAdList);
|
rv_news.setAdapter(adapter);
|
|
if (viewType == VIEW_TYPE_SMALLVIDEO) {
|
RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getContext(), 2);
|
rv_news.setLayoutManager(layoutManager);
|
//统一分为2列
|
((GridLayoutManager) rv_news.getLayoutManager()).setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
|
@Override
|
public int getSpanSize(int position) {
|
if (position >= nrAdList.size())
|
return 2;
|
else
|
return 1;
|
}
|
});
|
rv_news.addItemDecoration(itemDecoration2);
|
} else {
|
rv_news.setLayoutManager(new LinearLayoutManager(getContext()));
|
}
|
|
srl_news.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
|
@Override
|
public void onRefresh() {
|
currentPage = 1;
|
loadAd(currentPage);
|
}
|
});
|
adapter.setFooterView(footerView);
|
// srl_news.setRefreshing(true);
|
loadAd(currentPage);
|
}
|
|
private void loadAd(int page) {
|
/**
|
* Step2:构建请求参数
|
*/
|
CPUAdRequest.Builder builder = new CPUAdRequest.Builder();
|
builder.setDownloadAppConfirmPolicy(RequestParameters.DOWNLOAD_APP_CONFIRM_ONLY_MOBILE);
|
builder.setCustomUserId(UTDevice.getUtdid(getContext())); // 当无法获得设备IMEI,OAID,ANDROIDID信息时,通过此字段获取内容 + 广告
|
mCpuManager.setRequestParameter(builder.build());
|
mCpuManager.setRequestTimeoutMillis(10 * 1000); // 如果不设置,则默认5s请求超时
|
/**
|
* Step3:调用请求接口,请求广告
|
*/
|
mCpuManager.loadAd(page, mChannelId, true);
|
Log.i(TAG, "page:" + page);
|
}
|
|
@Override
|
public void onCreateView(View contentView, Bundle savedInstanceState) {
|
initView(contentView);
|
initData();
|
}
|
|
private void onLoadFinish() {
|
isLoad = false;
|
srl_news.setRefreshing(false);
|
footerView.setVisibility(View.GONE);
|
}
|
|
@Override
|
public void onAdLoaded(List<IBasicCPUData> list) {
|
onLoadFinish();
|
for (int i = list.size() - 1; i >= 0; i--) {
|
if ("ad".equalsIgnoreCase(list.get(i).getType())) {
|
list.remove(i--);
|
break;
|
}
|
}
|
|
int start = nrAdList.size();
|
if (currentPage == 1) {
|
nrAdList.clear();
|
nrAdList.addAll(list);
|
adapter.notifyDataSetChanged();
|
} else {
|
nrAdList.addAll(list);
|
int count = list.size();
|
if (count > 0) {
|
adapter.notifyItemRangeInserted(start, count);
|
}
|
}
|
|
|
}
|
|
@Override
|
public void onAdError(String s, int i) {
|
onLoadFinish();
|
}
|
|
@Override
|
public void onNoAd(String s, int i) {
|
onLoadFinish();
|
}
|
|
@Override
|
public void onAdClick() {
|
|
}
|
|
@Override
|
public void onVideoDownloadSuccess() {
|
|
}
|
|
@Override
|
public void onVideoDownloadFailed() {
|
|
}
|
|
@Override
|
public void onAdStatusChanged(String s) {
|
|
}
|
|
}
|