android 27 ListView

简介:

效果:

 

上图中ArrarAdapter是数组的适配器,CursorAdapter是游标适配器,用于操作数据库的数据。

ListView是垂直列表,数据源是集合或者数组,这些View都是安卓里的AdapterView的子类,都是支持适配器的View,AdapterView是通过Adapter(适配器类)像AdapterView的子类视图填充数据,BaseAdapter是所有适配器类的基类。适配器是MVC的C,View是V,数据是M,

activity_main.xml

复制代码
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ListView
        android:id="@+id/lvGeneral"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:divider="#ccc"
        android:dividerHeight="2dp"/>  分割线的高度

</RelativeLayout>
复制代码

MainActivity.java

复制代码
package com.sxt.day05_01;

import java.util.ArrayList;
import java.util.List;

import com.sxt.day05_01.entity.GeneralBean;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity {
    ListView mlvGeneral;
    List<GeneralBean> mGenerals;//代表十个军事家的集合
    GeneralAdapter mAdapter;
    int[] resid={//图片数组,
            //里面存的是图片的id整型值
            //public static final int baiqi=0x7f020000;
            // public static final int caocao=0x7f020001;
        R.drawable.baiqi,R.drawable.caocao,R.drawable.chengjisihan,
        R.drawable.hanxin,R.drawable.lishimin,R.drawable.nuerhachi,
        R.drawable.sunbin,R.drawable.sunwu,R.drawable.yuefei,
        R.drawable.zhuyuanzhang
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initData();//初始化数据
        initView();
    }
    
    private void initView() {
        mlvGeneral=(ListView) findViewById(R.id.lvGeneral);//main.xml中的ListView
        mAdapter=new GeneralAdapter();//创建适配器
        mlvGeneral.setAdapter(mAdapter);//关联适配器
    }

    private void initData() {
        //将资源中的字符串组数转换为Java数组,generals是int类型,代表strings.xml中定义的string数组<string-array/>标签
        String[] names=getResources().getStringArray(R.array.generals);//getResources获取res资源,
        /*
         strings.xml
         <resources>
        <string name="app_name">Day05_01-ListViewDemo</string>
        <string name="action_settings">Settings</string>
        <string name="hello_world">Hello world!</string>
        <string-array name="generals">
            <item>白起</item>
            <item>曹操</item>
            <item>成吉思汗</item>
            <item>韩信</item>
            <item>李世民</item>
            <item>努尔哈赤</item>
            <item>孙膑</item>
            <item>孙武</item>
            <item>朱元璋</item>
            <item>岳飞</item>
        </string-array>
        </resources>*/
        mGenerals=new ArrayList<GeneralBean>();
        for (int i = 0; i < names.length; i++) {
            GeneralBean bean=new GeneralBean(resid[i], names[i]);
            mGenerals.add(bean);
        }
    }

    //定义适配器
    class GeneralAdapter extends BaseAdapter{

        @Override
        public int getCount() {//返回所有集合数据数组的长度
            return mGenerals.size();
        }

        @Override
        public GeneralBean getItem(int position) {//返回某一行的数据
            return mGenerals.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        //返回ListView的一行给安卓系统,安卓系统拿到View后进行绘制,position某一行View在ListView的索引,convertView缓存当前列表中所有的列表项在内存中,比如数据有100个但是ListView只有10个则每次只显示10个,屏幕滚动的时候再显示后面的数据,但是每次屏幕只显示10个,
        //parent就是ListView
        public View getView(int position, View convertView, ViewGroup parent) {
            //拿到ListViewItem的布局,转换为View类型的对象,item_generals是int类型,代表item_generals.xml文件
            //返回行布局LinearLayout,将R.layout.item_generals布局转换为View的Java对象
            View layout=View.inflate(MainActivity.this, R.layout.item_generals, null);
            //找到显示军事家头像的ImageView,findViewById前面不加layout则在activity_main.xml中找,
            ImageView ivThumb=(ImageView) layout.findViewById(R.id.ivThumb);
            //找到显示军事家名字的TextView
            TextView tvName=(TextView) layout.findViewById(R.id.tvName);
            //获取军事中下标是position的军事家对象
            GeneralBean bean=mGenerals.get(position);
            //显示军事家头像
            ivThumb.setImageResource(bean.getResid());
            //显示军事家的姓名
            tvName.setText(bean.getName());
            
            return layout;//返回给安卓系统,则绘制一行,getView被调用getCount次,
        }
        
    }
}
复制代码
item_generals.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="wrap_content"
    android:orientation="horizontal" >
    <ImageView 
        android:id="@+id/ivThumb"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:src="@drawable/baiqi"/>
    <TextView 
        android:id="@+id/tvName"
        android:layout_width="wrap_content"
        android:layout_height="80dp"
        android:layout_marginLeft="10dp"   左边距离
        android:text="白起"   
        android:textSize="20sp"    
        android:gravity="center_vertical"/>    内部垂直居中
</LinearLayout>
复制代码

GeneralBean.java

复制代码
public class GeneralBean {

    private int resid;//图片的id值
    private String name;//军事家的姓名
    public int getResid() {
        return resid;
    }
    public void setResid(int resid) {
        this.resid = resid;
    }
复制代码

 


本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/4886828.html,如需转载请自行联系原作者

相关文章
|
8月前
|
API Android开发 开发者
Android UI设计: 什么是RecyclerView?为什么它比ListView更好?
Android UI设计: 什么是RecyclerView?为什么它比ListView更好?
105 2
|
8月前
|
XML Java Android开发
Android Studio App入门之列表视图ListView的讲解及实战(附源码 超详细必看)
Android Studio App入门之列表视图ListView的讲解及实战(附源码 超详细必看)
775 1
|
7月前
|
API Android开发 开发者
`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView
【6月更文挑战第26天】`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView。它提供高效的数据视图复用,优化的布局管理,支持多种布局(如线性、网格),并解耦数据、适配器和视图。RecyclerView的灵活性、性能(如局部刷新和动画支持)和扩展性使其成为现代Android开发的首选,特别是在处理大规模数据集时。
80 2
|
7月前
|
前端开发 API Android开发
25. 【Android教程】列表控件 ListView
25. 【Android教程】列表控件 ListView
258 2
|
8月前
|
XML Java Android开发
如何美化android程序:自定义ListView背景
如何美化android程序:自定义ListView背景
74 2
|
8月前
|
XML 编解码 Java
Android控件之高级控件——ListView、cardView、屏幕适配
Android控件之高级控件——ListView、cardView、屏幕适配
|
XML Android开发 数据格式
安卓-无敌解决ListView添加标题头无法正常显示的问题(歪门邪道)
安卓-无敌解决ListView添加标题头无法正常显示的问题(歪门邪道)
83 0
|
Java Android开发
[笔记]Android 学习一之转场动画+ViewPager+ListView简单Demo
[笔记]Android 学习一之转场动画+ViewPager+ListView简单Demo
|
XML Java Android开发
Android优化版ListView(附源代码)
本文是博主对Adapter(适配器)的一些理解,为了加深对Adapter的理解以及记录自己的阶段学习而写,同时也适合初学者阅读,参考本条博客的逻辑进行学习。
151 0
|
Android开发
安卓中listview点击每一条进入不同界面
安卓中listview点击每一条进入不同界面
118 0