listview详解

由于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();
                }
            }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值