Android---自定义Listview及其基本优化

来源:互联网 发布:软件项目解决方案 编辑:程序博客网 时间:2024/05/07 16:58

优化策略

-使用convertView 回收视图 减少内存消耗
-使用ViewHolder 内部类来缓存

直接上代码
MainActivty

public class MainActivity extends Activity {    private List<String> content=new ArrayList<>();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //设置数据        for(int i=0;i<20;i++)        {            content.add("我是第"+i+"个开关");        }        ListView listView= (ListView) findViewById(R.id.listView);        MyAdapter myAdapter=new MyAdapter(content,this);        listView.setAdapter(myAdapter);    }}

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"    android:layout_height="match_parent"  tools:context=".MainActivity">    <ListView        android:layout_width="match_parent"        android:layout_height="match_parent"        android:id="@+id/listView" /></RelativeLayout>

MyAdapter

public class MyAdapter extends BaseAdapter {    private LayoutInflater inflater;    private List<String> list;    private class ViewHolder    {        TextView txt;    }    public MyAdapter (List list,Context context)    {        this.list=list;        inflater=LayoutInflater.from(context);    }    @Override    public int getCount() {        return this.list.size();    }    @Override    public Object getItem(int position) {        return this.list.get(position);    }    @Override    public long getItemId(int position) {        return position;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        ViewHolder viewHolder;        if(convertView==null)        {            convertView=inflater.inflate(R.layout.listview_item,null);//通过inflater找到一个布局;            viewHolder=new ViewHolder();            viewHolder.txt= (TextView) convertView.findViewById(R.id.textView);            convertView.setTag(viewHolder);//将viewholder转换为object缓存起来        }        else        {            viewHolder=(ViewHolder)convertView.getTag();//将缓存转换为viewholder拿出来        }        viewHolder.txt.setText(list.get(position).toString());//设置数据        return convertView;    }}

listview_item.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent" android:layout_height="50dp"    android:orientation="horizontal">    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_gravity="center"        android:gravity="center"        android:text="New Text"        android:layout_weight="5"        android:id="@+id/textView" />    <Switch        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_gravity="center"        android:id="@+id/switch1" /></LinearLayout>
0 0
原创粉丝点击