package com.yeshi.ec.library_baiducpu.fragment;
|
|
import android.content.Context;
|
import android.graphics.Color;
|
import android.os.Bundle;
|
import android.support.annotation.NonNull;
|
import android.support.v4.widget.SwipeRefreshLayout;
|
import android.support.v7.widget.LinearLayoutManager;
|
import android.support.v7.widget.RecyclerView;
|
import android.util.Log;
|
import android.view.Gravity;
|
import android.view.LayoutInflater;
|
import android.view.View;
|
import android.view.ViewGroup;
|
import android.widget.RelativeLayout;
|
import android.widget.TextView;
|
|
import com.androidquery.AQuery;
|
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.entity.NativeCPUView;
|
import com.yeshi.ec.library_baiducpu.entity.SpinnerItem;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
|
/**
|
* 百度资讯
|
*/
|
public class BaiDuNewsContentFragment extends RetainViewFragment implements NativeCPUManager.CPUAdListener {
|
private final String YOUR_APP_ID = "be796ac7"; // 双引号中填写自己的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 MyAdapter adapter;
|
|
private final static String TAG = "BaiDuNewsContent";
|
|
private TextView footerView;
|
|
|
public static BaiDuNewsContentFragment newInstance(SpinnerItem spinnerItem) {
|
BaiDuNewsContentFragment fragment = new BaiDuNewsContentFragment();
|
Bundle bundle = new Bundle();
|
bundle.putSerializable("item", spinnerItem);
|
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);
|
loadAd(currentPage);
|
}
|
}
|
}
|
}
|
|
@Override
|
public void onScrolled(RecyclerView recyclerView, int dx, final int dy) {
|
super.onScrolled(recyclerView, dx, dy);
|
}
|
});
|
|
footerView = new TextView(getContext());
|
ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
|
footerView.setLayoutParams(params);
|
footerView.setText("努力加载中...");
|
footerView.setTextColor(Color.WHITE);
|
int padding = DimenUtils.dip2px(getContext(), 10);
|
footerView.setPadding(padding, padding, padding, padding);
|
footerView.setGravity(Gravity.CENTER);
|
footerView.setTextSize(12);
|
}
|
|
private void initData() {
|
Bundle bundle = getArguments();
|
SpinnerItem item = (SpinnerItem) bundle.getSerializable("item");
|
bundle.clear();
|
mChannelId = item.getmId();
|
|
mCpuManager = new NativeCPUManager(getContext(), YOUR_APP_ID, this);
|
/**
|
* 可选设置: 设置暗黑模式或调整内容详情页的字体大小
|
*/
|
mCpuManager.setLpFontSize(CpuLpFontSize.SMALL);
|
mCpuManager.setLpDarkMode(true);
|
adapter = new MyAdapter(getContext());
|
rv_news.setAdapter(adapter);
|
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();
|
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) {
|
|
}
|
|
class MyAdapter extends RecyclerView.Adapter {
|
private LayoutInflater inflater;
|
private AQuery aq;
|
private View footerView;
|
|
private final int TYPE_FOOTER = 1;
|
private final int TYPE_CONTENT = 2;
|
|
|
public MyAdapter(Context context) {
|
inflater = LayoutInflater.from(getContext());
|
aq = new AQuery(context);
|
}
|
|
public void setFooterView(View footerView) {
|
this.footerView = footerView;
|
}
|
|
|
@NonNull
|
@Override
|
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
if (viewType == TYPE_CONTENT)
|
return new ViewHolder(inflater.inflate(R.layout.item_baidu_news, null, false));
|
else
|
return new FooterViewHolder(footerView);
|
}
|
|
@Override
|
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
|
if (holder instanceof ViewHolder) {
|
ViewHolder viewHolder = (ViewHolder) holder;
|
final IBasicCPUData nrAd = nrAdList.get(position);
|
final NativeCPUView cpuView = new NativeCPUView(getContext());
|
if (cpuView.getParent() != null) {
|
((ViewGroup) cpuView.getParent()).removeView(cpuView);
|
}
|
cpuView.setItemData(nrAd, aq);
|
viewHolder.rl_container.removeAllViews();
|
viewHolder.rl_container.addView(cpuView);
|
nrAd.onImpression(viewHolder.view);
|
viewHolder.view.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View view) {
|
nrAd.handleClick(view);
|
}
|
});
|
}
|
}
|
|
@Override
|
public int getItemCount() {
|
int count = nrAdList.size();
|
if (footerView != null)
|
count++;
|
return count;
|
}
|
|
@Override
|
public int getItemViewType(int position) {
|
if (position >= nrAdList.size())
|
return TYPE_FOOTER;
|
else
|
return TYPE_CONTENT;
|
}
|
|
class ViewHolder extends RecyclerView.ViewHolder {
|
RelativeLayout rl_container;
|
View view;
|
|
public ViewHolder(View itemView) {
|
super(itemView);
|
view = itemView;
|
rl_container = itemView.findViewById(R.id.native_outer_view);
|
}
|
}
|
|
class FooterViewHolder extends RecyclerView.ViewHolder {
|
public FooterViewHolder(View itemView) {
|
super(itemView);
|
}
|
}
|
}
|
|
}
|