3步骤第一步 布局xml
<com.handmark.pulltorefresh.library.PullToRefreshListView
android:id="@+id/pull_refresh_list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:cacheColorHint="#00000000" //1去除拖动背景色,否则拖动会显示黑色背景
android:divider="#19000000"
android:dividerHeight="4dp"
android:fadingEdge="none" //2去除上下边黑色阴影
android:fastScrollEnabled="false" //3快速滑动图标
android:footerDividersEnabled="false" //4页脚分割线
android:headerDividersEnabled="false"
android:smoothScrollbar="true" />
3步骤第二步 代码
public View initView() {
//轮播图+ListView
// textView = new TextView(mCtx);
// return textView;
View viewTop = View.inflate(mCtx, R.layout.layout_new_tab_top, null);
ButterKnife.bind(this, viewTop);
View viewBottom = View.inflate(mCtx, R.layout.layout_new_tab_bottom, null);
//获取布局文件中的带下拉刷新上拉加载的控件
mPullRefreshList = (PullToRefreshListView) viewBottom.findViewById(R.id.pull_refresh_list);
//获取真实的listView
lvNews = mPullRefreshList.getRefreshableView();
//给ListView添加一个头
lvNews.addHeaderView(viewTop);
//告知pullToRefreshListView支持下拉和上拉2中行为
mPullRefreshList.setMode(PullToRefreshBase.Mode.BOTH);
//监听下拉和上拉,下拉和上拉都必须有效
mPullRefreshList.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener<ListView>() {
@Override
public void onRefresh(PullToRefreshBase<ListView> refreshView) {
if(refreshView.getCurrentMode() == PullToRefreshBase.Mode.PULL_FROM_START){
//下拉行为,触发下拉刷新
Log.i("","触发下拉刷新................");
//访问网络,url地址原地址
//刷新,将原有页面的数据清理掉,展示最新的数据 true 代表本次请求是刷新
mPullRefreshList.onRefreshComplete();
}else{
//上拉行为,触发加载更多
Log.i("","触发上拉加载................");
//访问网络,url地址more字段提供出来的链接地址
//加载,保留原有数据,将下一页的数据放在原有数据后面 false 代表本次请求是加载
mPullRefreshList.onRefreshComplete();
}
}
});
//让ListView添加单条目点击事件
lvNews.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
News news = newsList.get(position - 2);
//每一条新闻都有一个唯一性id,将已经读过的新闻id以如下的形式存储在sp中 "#35311#35312#35313#35314........#35315"
//当下一次加载数据的时候,发现加载的数据中id和sp中的某一个id有重复,则认为此新闻是已读新闻,否则为未读新闻
//之前读过新闻ids字符串 ,形式"#35311#35312#35313#35314........#35315"
String ids = SPUtil.getString(mCtx, Constant.IDS, "");
if (!news.isRead){
//将未读修改为已读
news.isRead = true;
//将已读id存储在sp中
SPUtil.saveString(mCtx,Constant.IDS,ids+"#"+news.id);
//刷新listView页面方法
myAdapter.notifyDataSetChanged();
}
Intent intent = new Intent(mCtx, NewDetailActivity.class);
intent.putExtra("news",news);
mCtx.startActivity(intent);
}
});
return viewBottom;
}
3步骤第三步 adpter
class MyAdapter extends BaseAdapter {
private static final int ITEM_PIC = 0;
private static final int ITEM_PIC_TEXT = 1;
@Override
public int getCount() {
return newsList.size();
}
@Override
public News getItem(int position) {
return newsList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getViewTypeCount() {
//条目类型总数
return 2;
}
@Override
public int getItemViewType(int position) {
//position位置的条目类型是什么
String type = newsList.get(position).type;
if (type.equals("1")) {
//指定3张图片类型状态码
return ITEM_PIC;
} else {
//指定1张图片+文字状态码
return ITEM_PIC_TEXT;
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (getItemViewType(position) == ITEM_PIC_TEXT) {
//构建图片+文本布局
PicTextViewHolder picTextViewHolder = null;
if (convertView == null) {
convertView = View.inflate(mCtx, R.layout.item_pic_text, null);
picTextViewHolder = new PicTextViewHolder(convertView);
convertView.setTag(picTextViewHolder);
} else {
picTextViewHolder = (PicTextViewHolder) convertView.getTag();
}
News item = getItem(position);
//设置新闻标题
picTextViewHolder.tvNewTitle.setText(item.title);
picTextViewHolder.tvPubTime.setText(item.pubdate);
//新闻图片
Glide.with(mCtx).load(item.listimage).into(picTextViewHolder.ivNews);
if(item.isRead){
//显示文字要为红色
picTextViewHolder.tvNewTitle.setTextColor(Color.RED);
picTextViewHolder.tvPubTime.setTextColor(Color.RED);
}else{
//显示文字要为黑色
picTextViewHolder.tvNewTitle.setTextColor(Color.BLACK);
picTextViewHolder.tvPubTime.setTextColor(Color.BLACK);
}
return convertView;
} else {
//构建纯图片布局
PicViewHolder picViewHolder = null;
if (convertView == null) {
convertView = View.inflate(mCtx, R.layout.item_pic, null);
picViewHolder = new PicViewHolder(convertView);
convertView.setTag(picViewHolder);
}else{
picViewHolder = (PicViewHolder) convertView.getTag();
}
News item = getItem(position);
//设置时间
picViewHolder.tvPubTime.setText(item.pubdate);
//设置3张图片
Glide.with(mCtx).load(item.listimage).into(picViewHolder.ivNew1);
Glide.with(mCtx).load(item.listimage1).into(picViewHolder.ivNew2);
Glide.with(mCtx).load(item.listimage2).into(picViewHolder.ivNew3);
if(item.isRead){
//显示文字要为红色
picViewHolder.tvPubTime.setTextColor(Color.RED);
}else{
//显示文字要为黑色
picViewHolder.tvPubTime.setTextColor(Color.BLACK);
}
return convertView;
}
}
}
static class PicViewHolder {
@BindView(R.id.iv_new1)
ImageView ivNew1;
@BindView(R.id.iv_new2)
ImageView ivNew2;
@BindView(R.id.iv_new3)
ImageView ivNew3;
@BindView(R.id.tv_pub_time)
TextView tvPubTime;
PicViewHolder(View view) {
ButterKnife.bind(this, view);
}
}
static class PicTextViewHolder {
@BindView(R.id.iv_news)
ImageView ivNews;
@BindView(R.id.tv_new_title)
TextView tvNewTitle;
@BindView(R.id.tv_pub_time)
TextView tvPubTime;
PicTextViewHolder(View view) {
ButterKnife.bind(this, view);
}
}