ListView的简单使用
来源:互联网 发布:淘宝上的台式机 编辑:程序博客网 时间:2024/06/07 05:48
ListView控件在Android开发中使用非常广泛,在许多的应用的场景上都能看到它的身影,下面用一个小例子来简单的使用一下ListView控件。
1.创建项目,在MainActivity对应的布局中声明出ListView控件
<ListView android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="match_parent">
</ListView>2.在MainActivity的onCreate方法中找到该控件,并封装假数据,设置适配器,设置监听事件
private ListView lv; private List<Contacts> list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //找到控件 lv = (ListView) findViewById(R.id.lv); //初始化数据 initData(); //为ListView设置适配器 lv.setAdapter(new MyAdapter(list)); //为ListView的条目设置监听器 lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override //处理店家事件,弹出提示 public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { Toast.makeText(MainActivity.this, "您点击了:" + list.get(i).getContactName() + ",电话号码为:" + list.get(i).getContactNumber(), Toast.LENGTH_SHORT).show(); } }); } /** * 初始化数据 * * @author Summer * create at 2017/8/19 16:06 */ private void initData() { list = new ArrayList<Contacts>(); for (int i = 0; i < 15; i++) { list.add(new Contacts("张三", "13012345678")); list.add(new Contacts("李四", "13012344564")); list.add(new Contacts("王五", "13012355486")); list.add(new Contacts("那个谁", "13012354656")); } }监听器中的逻辑是在点击某一项条目时,弹出具体详情。
其中List的泛型Contacts是自定义的一个Javabean
/** * 封装联系人的Javabean * Created by Summer on 2017/8/19. */public class Contacts { private String contactName; private String contactNumber; public Contacts(String contactName, String contactNumber) { this.contactName = contactName; this.contactNumber = contactNumber; } public String getContactName() { return contactName; } public String getContactNumber() { return contactNumber; }}此时适配器MyAdapter还没有创建,所以程序会报错
3.创建MyAdapter适配器,MyAdapter继承了BaseAdapter,并实现了其中四个抽象方法,增加了一个带一个参数的构造方法,用来接收传递进来的数据。
import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;import java.util.List;/** * 自定义的Adapter继承了BaseAdapter * Created by Summer on 2017/8/19. */public class MyAdapter extends BaseAdapter { private List<Contacts> list; //构造方法,用于接收传递进来的参数 public MyAdapter(List<Contacts> list) { this.list = list; } //以下四个方法是BaseAdapter中的抽象方法 //返回数据源数量 @Override public int getCount() { return list.size(); } //返回滚动进来的数据源对象 @Override public Object getItem(int i) { return list.get(i); } //返回ID @Override public long getItemId(int i) { return i; } //用于加载布局,并给布局中组件赋值,传递到ListView中 @Override public View getView(int i, View view, ViewGroup viewGroup) { //声明自定义View对象,用于存放条目布局 View listView = null; //自定义内部类。用于优化ListView ViewHolder holder = null; //优化ListView的代码,复用view if (view == null) { //加载条目布局 listView = View.inflate(viewGroup.getContext(), R.layout.item_listview, null); holder = new ViewHolder(); //将控件放置到内部类中,可以复用已经存在的控件对象,节省内存 holder.contactName = listView.findViewById(R.id.listview_name); holder.contactNumber = listView.findViewById(R.id.listview_number); //将holder存储到自定义的view中 listView.setTag(holder); } else { //复用已存在的view listView = view; holder = (ViewHolder) listView.getTag(); } //为空间赋值 holder.contactName.setText(list.get(i).getContactName()); holder.contactNumber.setText(list.get(i).getContactNumber()); return listView; } /** * 自定义内部类,为优化ListView * * @author Summer * create at 2017/8/19 17:04 */ class ViewHolder { private TextView contactName; private TextView contactNumber; }}
在getView中两次优化了ListView,提高了ListView的效率。
第一次优化是复用的getView方法中的view参数,view中缓存了上次加载好的布局,这样就防止多次加载布局,提升运行效率
第二次优化是使用了自定义的ViewHolder内部类,该类中存在两个成员变量,分别对应着item_listview中的两个TextView,在使用findViewById的时候,直接将找到的对象赋值给ViewHolder中的两个成员变量,这样就可以复用上次已经找到了的控件实例,不需要每次都要去findViewById,节省了时间与空间,进一步的提升了ListView的运行效率。
在getView中加载了一个名为item_listview的布局,此为ListView的条目布局,具体代码如下:<?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="wrap_content" android:orientation="horizontal" > <TextView android:id="@+id/listview_name" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:text="test" android:padding="15dp" android:textColor="#000" android:textSize="16sp" /> <TextView android:id="@+id/listview_number" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:padding="15dp" android:text="test" android:textColor="#000" android:textSize="16sp" /></LinearLayout>使用了两个TextView,分别代表联系人的名字和电话号码
5.运行效果截图
6.到此就大功告成啦~,本人学生一枚,如果您发现有什么不足的地方,还请留言指点,谢谢您。
阅读全文
0 0
- 简单的ListView使用
- ListView的简单使用
- listview的简单使用
- ListView的简单使用
- 简单的ListView使用
- ListView的简单使用
- ListView的简单使用
- ListView 的简单使用
- ListView的简单使用
- listview的简单使用
- ListView的简单使用
- ListView的简单使用
- ListView的简单使用
- listview的简单使用
- Android ListView的简单使用
- Android ListView的简单使用
- GridView、ListView的简单使用
- Android ListView 列表控件的简单使用
- 欢迎使用CSDN-markdown编辑器
- Party
- Linux shell清屏
- 火墙策略
- 选择排序-直接选择排序
- ListView的简单使用
- MongoDB Replica Set 副本集
- 前缀表达式&后缀表达式
- Client-server model
- Friend-Graph
- iOS开发中OC与H5网页交互之OC传值给JS(WKWebView)
- 数论中的一些模板
- oracle 学习笔记
- ISCSI网络存储服务器