Android高级控件之ListView的优化以及下拉刷新页面

1.ListView的优化

   在优化之前我们先来说说配置器的自定义,为什么需要自定义配置器呢,因为系统自带的配置器不能满足我们的需求,所以就需要我们自己写配置器来实现功能,

但是在创建ListView时我们需要先得到两大元素:

1)数据集,即要映射的字符串、图片信息之类。

2)适配器,实现把要映射的字符串、图片信息映射成视图(如Textview、Image等组件),再添加到ListView中。

实现细节:

1.得到控件(通过控件id得到)

2.得到数据源

3.创建适配器

public class ListViewAdapter(自己定义名字) extends BaseAdapter{........}  //自定义的适配器一般继承BaseAdapter类

4.通过控件设置适配器

自定义适配器后直接在设置适配器中调用就可以了

2.优化ListView

我们为什么要优化ListView,因为不优化的话,数据过多会引起数据溢出而报错,如果我们优化了的话就会减少内存的消耗,同事加快item的加载速度,

1): 
重用了convertView,很大程度上的减少了内存的消耗。通过判断convertView是否为null,是的话就需要产生一个视图出来,然后给这个视图数据,最后将这个视图返回给底层。
特点:如果当前的convertView为null,则通过LayoutInflat产生一个view。 

ViewCode 
publicViewgetView(intposition,ViewconvertView,ViewGroupparent) 
{ 
if(convertView==null) 
{ 
convertView=LayoutInflater.from(context).inflate(R.layout.section_list_item1,null); 

TextViewtv_name=(TextView)convertView.findViewById(R.id.contact_contactinfoitem_tv_name); 
TextViewtv_phone=(TextView)convertView.findViewById(R.id.contact_contactinfoitem_tv_phoneNum); 
ContactInfo1confo=contacts.get(position); 
if(confo!=null){//toseteveryitem'stext 
tv_name.setText(confo.getContactName()); 
tv_phone.setText(confo.getContact_Phone()); 

returnconvertView; 
}


3.下拉刷新

1.要先引入刷新下拉的资源,如果没有的话可以登录www.github.com,在里面搜索pull to refresh后直接下载就可以了,然后倒入项目中,让项目与资源建立联系后就可以像平时使用控件那样就可以了。步骤如下:


把你的library路径倒入后点击下一步就可以了


导入后右击你的项目


然后建立联系



然后就可以直接使用了。

public class PulltorefreshActivity extends AppCompatActivity {

    private List<String> list_map_date;
    private ArrayAdapter adapter_pull;
    private PullToRefreshListView ptlv_main_pulltorefresh;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pulltorefresh);


        ptlv_main_pulltorefresh = (PullToRefreshListView) findViewById(R.id.ptlv_main_pulltorefresh);
        //定义数据
        list_map_date = new ArrayList<>();
        for (int i = 0; i <=20 ; i++) {
            list_map_date.add("哈思顿"+i);
        }

       //创建适配器
        adapter_pull = new ArrayAdapter(this,android.R.layout.simple_list_item_1, list_map_date);

        ptlv_main_pulltorefresh.setAdapter(adapter_pull);
        ptlv_main_pulltorefresh.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
                Toast.makeText(PulltorefreshActivity.this, "刷新页面了", Toast.LENGTH_SHORT).show();
                  new MyTask().execute();

            }

            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {

            }
        });

    }

    class MyTask extends AsyncTask{

        @Override
        protected Object doInBackground(Object[] objects) {
            for (int i = 0; i <4; i++) {
                list_map_date.add(0,"haha"+i);
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            return null;
        }

        @Override
        protected void onPostExecute(Object o) {

            adapter_pull.notifyDataSetChanged();
            ptlv_main_pulltorefresh.onRefreshComplete();

            super.onPostExecute(o);
        }
    }








}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值