由于listview内容比较多,这里先讲解基础部分,以后会持续更新。
//定义方法初始化数据
//获取listview
ListView lv = (ListView) view.findViewById(R.id.home_lv);
//创建适配器
homeAdapter = new HomeAdapter(getContext(),newsList);
//这里的适配器继承BaseAdapter
//数据源
public List<? extends Map<String, ?>> data;
public LayoutInflater inflater;
//上下文
private Context context;
public HomeAdapter(Context context,List<? extends Map<String, ?>> data){
this.data = data;
this.context = context;
}
//返回数据有多少条
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
//渲染view
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHold viewHold;
//若convertView为null创建
if(convertView==null){
viewHold = new ViewHold();
//将item布局文件转换成view
convertView = LayoutInflater.from(context).inflate(R.layout.home_item,null);
//对view进行设置
viewHold.title = (TextView) convertView.findViewById(R.id.home_list_title);
viewHold.source = (TextView) convertView.findViewById(R.id.home_list_source);
viewHold.date = (TextView) convertView.findViewById(R.id.home_list_date);
viewHold.link = (TextView) convertView.findViewById(R.id.home_item_link);
//将view放置在tag中
convertView.setTag(viewHold);
}else {
//若果view不为null就直接去吃viewHold
viewHold = (ViewHold) convertView.getTag();
}
//渲染视图
viewHold.title.setText(data.get(position).get("title").toString());
viewHold.date.setText(data.get(position).get("date").toString());
viewHold.source.setText(data.get(position).get("source").toString());
viewHold.link.setText(data.get(position).get("link").toString());
return convertView;
}
//优化findById
class ViewHold{
private TextView title;
private TextView source;
private TextView date;
private TextView link;
private ImageView imageView;
}
item.xml自行设置,这里不做要求。
//listview设置适配器
lv.setAdapter(homeAdapter);
============至此listview就实现了==================
下拉加载数据:
lv.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
Log.i(TAG, "onScrollStateChanged: " + view.getLastVisiblePosition() + "===" + lastVisibleIndex);
//判断是否下拉到最底部,重新请求数据
if (view.getLastVisiblePosition() + 1 == lastVisibleIndex && SCROLL_STATE_IDLE == scrollState) {
page += 1;
getData();
//注意:此方法很关键,当数据发生变化的时候调用,这里不用给lv再次设置适配器否则会从头开始加载
homeAdapter.notifyDataSetChanged();
}
}