第一行代码笔记5(ListView)
来源:互联网 发布:易语言打开网页源码 编辑:程序博客网 时间:2024/04/28 06:17
1.新建一个实体类Fruit
package com.example.administrator.myapplication;/** * Created by Administrator on 2015/9/28. */public class Fruit { //name表示的是名字 private String name; public String getName() { return name; } public void setName(String name) { this.name = name; }//表示的是图片的Id private int imageId; public int getImageId() { return imageId; } public void setImageId(int imageId) { this.imageId = imageId; } public Fruit(String name,int imageId){ this.name = name; this.imageId = imageId; }}2.ListView的自定义布局
<?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"><ImageView android:id="@+id/fruit_image" android:layout_width="200dp" android:layout_height="200dp" /> <TextView android:id="@+id/fruit_name" android:layout_gravity="center" android:layout_marginLeft="10dp" android:layout_width="wrap_content" android:layout_height="wrap_content" /></LinearLayout>3.定义一个适配器(这里---------->提高运行效率的优化【对加载布局和加载控件的优化】)
//创建一个适配器,继承ArrayAdapter,并将泛型指定为Fruitpublic class FruitAdapter extends ArrayAdapter<Fruit> { //为了在getView中获取布局,我们定义一个int类型的数据获取ListView的子项布局 private int resourceId; //重写父类的一个构造函数 第一个参数是上下文对象 第二个参数ListView的子向布局 第三个参数是数据 public FruitAdapter(Context context, int resource, List<Fruit> objects) { super(context, resource, objects); resourceId = resource; } //这个方法在每个子项被滚动到屏幕内的时候被调用 @Override public View getView(int position, View convertView, ViewGroup parent) { //获取当前项的Fruit实例 Fruit fruit = getItem(position); View view; //我们使用一个内部类,用户对控件的缓存 //当convertView为空的时候,创建一个ViewHolder对象,并将控件的实例都存放在ViewHolder里, // 然后调用View的setTag()方法,将ViewHolder对象存储在View中。 // 当convertView不为空的时候则调用View的getTag()方法,把ViewHolder重新取出。 ViewHolder viewHolder; //优化 如果converView是空的话,则使用LayoutInflater去加载布局,如果不为空的话,直接对converView进行重用 if (convertView == null) { view = LayoutInflater.from(getContext()).inflate(resourceId, null); viewHolder = new ViewHolder(); viewHolder.fruitImage = (ImageView) view.findViewById(R.id.fruit_image); viewHolder.fruitName = (TextView) view.findViewById(R.id.fruit_name); view.setTag(viewHolder);//将viewHolder存储在view中 } else { view = convertView; viewHolder = (ViewHolder) view.getTag(); } // 分别为他们设置图片和文字 viewHolder.fruitImage.setImageResource(fruit.getImageId()); viewHolder.fruitName.setText(fruit.getName());// 为子项加载我们传入的布局// View view = LayoutInflater.from(getContext()).inflate(resourceId, null);// 分别获取我们布局中的Imageview和TextView实例(每次加载的时候都会findViewById()方法来获取控件的实例 可以优化!)// ImageView fruitimage =(ImageView) view.findViewById(R.id.fruit_image);// TextView fruitName = (TextView)view.findViewById(R.id.fruit_name);// 分别为他们设置图片和文字// fruitimage.setImageResource(fruit.getImageId());// fruitName.setText(fruit.getName());// //返回 return view; } class ViewHolder { ImageView fruitImage; TextView fruitName; }}4.在MainActivity设配适配器还有点击事件
public class MainActivity extends AppCompatActivity { private List<Fruit> fruitList = new ArrayList<Fruit>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initFruits();//初始化加载数据 FruitAdapter fruitAdapter = new FruitAdapter(MainActivity.this,R.layout.fruit_item,fruitList); ListView listView = (ListView)this.findViewById(R.id.list_view); listView.setAdapter(fruitAdapter); //点击 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Fruit fruit = fruitList.get(position); Toast.makeText(MainActivity.this,fruit.getName(),Toast.LENGTH_SHORT).show(); } }); } private void initFruits() { Fruit apple = new Fruit("apple",R.mipmap.apple512); fruitList.add(apple); Fruit banana = new Fruit("banana",R.mipmap.banana512); fruitList.add(banana); Fruit cherry = new Fruit("cherry",R.mipmap.cherry512); fruitList.add(cherry); Fruit apricot = new Fruit("apricot",R.mipmap.apricot512); fruitList.add(apricot); Fruit lemon = new Fruit("lemon",R.mipmap.lemon512); fruitList.add(lemon); Fruit mango = new Fruit("mango",R.mipmap.mango512); fruitList.add(mango); Fruit peach = new Fruit("peach",R.mipmap.peach512); fruitList.add(peach); }效果:
总结:我们使用ListView的过程中主要就是定义一个ListView的子项布局,一个实体类,一个适配器,然后在主窗口中调到
0 0
- 第一行代码笔记5(ListView)
- 《第一行代码》ListView学习笔记
- ListView 总结(学习《第一行代码》)
- ListView的用法 - 第一行代码—android学习笔记
- 《第一行代码》自学笔记-ListView的基本用法
- 第一行代码-笔记
- 《第一行代码》笔记
- 第一行代码笔记
- 第一行代码笔记5:网络
- (第一行代码)笔记(一)
- (第一行代码)笔记(二)
- (第一行代码)笔记(三)
- (第一行代码)笔记(四)
- 第一行代码笔记4(UI)
- 第一行代码笔记6(Fragment)
- 第一行代码笔记7(BroadcastReceiver1)
- 第一行代码笔记8(BroadcastReceiver2)
- Android--第一行代码笔记(1)
- 如何在webview中设置自定义字体
- 回车和换行
- Slider滑竿+动画
- 二叉搜索树与双向链表
- IntelliJ IDEA的高效快捷键设置
- 第一行代码笔记5(ListView)
- Apache—DBUtils框架简介、DbUtils类、QueryRunner类 、ResultSetHandler接口
- 表情代码
- Linux内核编程初探:块设备驱动程序——Ramdisk
- ADT18.0.0之后jar包(support-v4)管理源码的方法
- apache/iis访问日志转到sql存储的程序思维
- web开发中处理特殊符号(&)随笔
- 软件测试7到9章总结
- ios开发一些零碎的小知识(二)