Android—高级控件(二)ListView 优化版

来源:互联网 发布:ubuntu ibus 系统设置 编辑:程序博客网 时间:2024/05/21 05:22

ListView优化(减少占用的运行内存)

实例:






代码:

布局文件

主布局

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical" android:layout_width="match_parent"    android:layout_height="match_parent">    <ListView        android:layout_width="match_parent"        android:layout_height="match_parent"        android:id="@+id/lv_list_view1"        >    </ListView></LinearLayout>


副布局

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="horizontal"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:descendantFocusability="blocksDescendants"    >    <ImageView        android:layout_width="50dp"        android:layout_height="50dp"        android:id="@+id/iv_item_icon"        />    <TextView        android:layout_width="0dp"        android:layout_height="wrap_content"        android:layout_weight="1"        android:textSize="30sp"        android:id="@+id/iv_item_text"        />    <Button        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="下载"        android:id="@+id/iv_item_bt"        /></LinearLayout>


Java代码

package com.example.myapplication;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.ImageView;import android.widget.ListView;import android.widget.SimpleAdapter;import android.widget.TextView;import android.widget.Toast;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;/** * Created by Administrator on 2017/6/9 0009. */public class ListView1Activity extends AppCompatActivity{    private ListView lv_list_view1;    //数据源    private String titles[]={"小鸟","小猫","小鸡","小牛","小狗"};    private int images[]={R.drawable.bird,R.drawable.cat,R.drawable.chicken,R.drawable.cow,R.drawable.dog};    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.listview1);        //第一步  获取控件        lv_list_view1 = (ListView) findViewById(R.id.lv_list_view1);        //第二步  设置数据源      /*  //第三步 给控件设置适配器(可优化)        List<Map<String,Object>> list=new ArrayList<>();        for (int i = 0; i < titles.length; i++) {            Map<String,Object> map=new HashMap<>();            map.put("title",titles[i]);            map.put("image",images[i]);            list.add(map);                    }        SimpleAdapter adapter=new SimpleAdapter(this,list,R.layout.item_listview,new String[]{"title","image"},new int[]{R.id.iv_item_text,R.id.iv_item_icon});        lv_list_view1.setAdapter(adapter);*/       lv_list_view1.setAdapter(new MyAdapter());        //第四步给listview设置点击事件        lv_list_view1.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {                Toast.makeText(ListView1Activity.this,"跳转"+titles[position%titles.length],Toast.LENGTH_SHORT).show();            }        });    }    //OOM OutOfMemory 内存溢出    class MyAdapter extends BaseAdapter{        //返回出多少行数据        @Override        public int getCount() {            return 10000;        }        @Override        public Object getItem(int position) {            return titles[position%titles.length];        }        @Override        public long getItemId(int position) {            return position;        }        @Override        public View getView(final int position, View convertView, ViewGroup parent) {            //判断是否为空            if(convertView==null){                convertView=getLayoutInflater().inflate(R.layout.item_listview,null);                ItemTag itemTag=new ItemTag();                itemTag.imageView= (ImageView) convertView.findViewById(R.id.iv_item_icon);                itemTag.textView= (TextView) convertView.findViewById(R.id.iv_item_text);                itemTag.button= (Button) convertView.findViewById(R.id.iv_item_bt);                convertView.setTag(itemTag);            }            ItemTag itemTag=(ItemTag) convertView.getTag();            //设值            itemTag.imageView.setImageResource(images[position%titles.length]);            itemTag.textView.setText(titles[position%titles.length]);            //给按钮设置点击事件            itemTag.button.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View v) {                    Toast.makeText(ListView1Activity.this,"正在下载"+titles[position%titles.length],Toast.LENGTH_SHORT).show();                }            });            return convertView;        }    }}