zoukankan      html  css  js  c++  java
  • 安卓第六天笔记--ListView

    安卓第六天笔记--ListView

    1.AdapteView

    AdapteView 继承ViewGroup它的本质是容器

     

    AdapterView派生了3个子类:

    AbsListView

    AbsSpinner

    AdapterViewAnimation

    这3个类是抽象类

    实际使用中采用的是它们的子类

     

     

    2.Adpate结构

     

    3.使用ArrayAdapter完成ListView显示

     

    ListView使用的是ListAdapter类型的适配器

    由于只显示文字,所有使用ArrayAdapter

    ArrayAdapter 是ListAdapter的子类

    布局文件

    <?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="match_parent"
    
        android:orientation="vertical">
    
    <!--
    
    divider:分隔线颜色
    
    dividerHeight:分隔线高度
    
    ListView
    
    建议 layout_与 layout_height 都设置为match_parent
    
    要预览的话要有ID属性
    
    -->
    
    <ListView
    
        android:id="@+id/lv"
    
        android:layout_width="match_parent"
    
        android:layout_height="match_parent"
    
        android:divider="@color/colorAccent"
    
        android:dividerHeight="2dp">
    
    
    
    </ListView>
    
    
    
    </LinearLayout>

    Activity

    /**
    
     * ListView使用
    
     * ArrayAdapter适配器
    
     */
    
    public class MainActivity extends AppCompatActivity {
    
    
    
        /*
    
        ListView
    
         */
    
        private ListView lv;
    
    
    
        private String [] items={
    
                "孙悟空",
    
                "猪八戒",
    
                "牛魔王",
    
                "JAVA",
    
                "Android",
    
                "Ajax",
    
                "XML",
    
                "Spring",
    
                "Hibernate",
    
                "Spring MVC",
    
                "MyBatis"
    
        };
    
    
    
        @Override
    
        protected void onCreate(Bundle savedInstanceState) {
    
            super.onCreate(savedInstanceState);
    
            setContentView(R.layout.activity_main);
    
    
    
            lv = (ListView) findViewById(R.id.lv);
    
    
    
            /*
    
            public ArrayAdapter(Context context, @LayoutRes int resource, @NonNull T[] objects)
    
    
    
            context:上下文
    
             */
    
            //为ListView设置适配器
    
            lv.setAdapter(new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,items));
    
    
    
    
    
        }
    
    }

    android.R.layout.simple_list_item_1

    内部就是一个TextView

    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
    
        android:id="@android:id/text1"
    
        android:layout_width="match_parent"
    
        android:layout_height="wrap_content"
    
        android:textAppearance="?android:attr/textAppearanceListItemSmall"
    
        android:gravity="center_vertical"
    
        android:paddingStart="?android:attr/listPreferredItemPaddingStart"
    
        android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
    
        android:minHeight="?android:attr/listPreferredItemHeightSmall" />

    4.使用SimpleAdapter

    public SimpleAdapter(Context context, List<? extends Map<String, ?>> data,
            @LayoutRes int resource, String[] from, @IdRes int[] to)

    context:上下文

    LIst<? extends Map<String,/.>> data: 集合类型的对象,每个元素都是一个Map<String,?>对象

    resource:提定一个界面布局的ID,布局文件

    from:该参数提取Map<String,?>的key

    to:int[]类型的参数决定填充哪些控件

     

    布局文件:

    <?xml version="1.0" encoding="utf-8"?>
    
    <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="com.itheima.listviewsimpleadapter.MainActivity">
    
    
    
    
    
        <!--
    
        ListView
    
        -->
    
        <ListView
    
            android:id="@+id/lv"
    
            android:layout_width="match_parent"
    
            android:layout_height="match_parent">
    
    
    
        </ListView>
    
    
    
    </RelativeLayout>
     
    View Code

    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="match_parent"
    
                  android:orientation="horizontal">
    
    
    
        <!--
    
        头像显示
    
        -->
    
        <ImageView
    
            android:id="@+id/iv_icon"
    
            android:layout_width="0dp"
    
            android:layout_weight="1"
    
            android:layout_height="wrap_content"
    
            android:src="@drawable/libai"/>
    
    
    
        <!--
    
        右边显示 姓名与描述
    
        -->
    
    
    
        <LinearLayout
    
            android:layout_width="0dp"
    
            android:layout_weight="2"
    
            android:layout_height="wrap_content"
    
            android:orientation="vertical">
    
            <TextView
    
                android:id="@+id/tv_name"
    
                android:layout_width="match_parent"
    
                android:layout_height="wrap_content"
    
                android:text="这里显示姓名"/>
    
    
    
            <TextView
    
                android:id="@+id/tv_desc"
    
                android:layout_width="match_parent"
    
                android:layout_height="wrap_content"
    
                android:text="这里显示描述"/>
    
        </LinearLayout>
    
    </LinearLayout>
     
    View Code

                                                                

    Activity中SimpleAdapter

    
    
    /**
    
     * ListView
    
     * SimpleAdapter实现
    
     * @author  刘楠
    
     */
    
    public class MainActivity extends AppCompatActivity {
    
    
    
        private ListView lv;
    
    
    
        /*
    
        姓名
    
         */
    
        private String[] names = {
    
                "孙悟空",
    
                "猪八戒",
    
                "牛魔王",
    
                "JAVA"
    
        };
    
        /*
    
        * 图片资源ID*/
    
        private int[] resourceID = {
    
                R.drawable.libai,
    
                R.drawable.nongyu,
    
                R.drawable.qingzhao,
    
                R.drawable.tiger
    
        };
    
    
    
        private String[] desc = {
    
                "一个猴子",
    
                "一头猪",
    
                "一头牛",
    
                "一门开发语言"
    
        };
    
    
    
        @Override
    
        protected void onCreate(Bundle savedInstanceState) {
    
            super.onCreate(savedInstanceState);
    
            setContentView(R.layout.activity_main);
    
    
    
    
    
            lv = (ListView) findViewById(R.id.lv);
    
    
    
            //创建一个List集合
    
            List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>();
    
    
    
            //为List添加元素
    
            for (int i = 0; i < names.length; i++) {
    
                //声明一个Map
    
                Map<String, Object> map = new HashMap<String, Object>();
    
                map.put("name", names[i]);
    
                map.put("icon", resourceID[i]);
    
                map.put("desc", desc[i]);
    
                //添加到集合
    
                listItems.add(map);
    
            }
    
    
    
            //创建一个SimpleAdapter
    
            /*
    
            public SimpleAdapter(Context context, List<? extends Map<String, ?>> data,
    
                @LayoutRes int resource, String[] from, @IdRes int[] to) {
    
    
    
                context:上下文
    
                LIst<? extends Map<String,/.>> data: 集合类型的对象,每个元素都是一个Map<String,?>对象
    
                resource:提定一个界面布局的ID,布局文件
    
                from:该参数提取Map<String,?>的key
    
                to:int[]类型的参数决定填充哪些控件
    
    
    
             */
    
            SimpleAdapter simpleAdapter =
    
                    new SimpleAdapter(this, listItems, R.layout.simple_item, new String[]{"name", "icon", "desc"},new int[]{R.id.tv_name,R.id.iv_icon,R.id.tv_desc});
    
    
    
            //为listview设置适配器
    
            lv.setAdapter(simpleAdapter);
    
    
    
        }
    
    }
     
    View Code

    5.使用BaseAdapter

    BaseAdapter要实现 以下方法:

    getCount():方法返回控制该Adapter将会包含多少个列表项

    getItem(int position): 该方法的返回值决定第Position处的列表项的内容

    getItemId(int position): 该方法的返回值决定第Position处的列表项的内容的ID

    getView(int position,View conerView ,ViewGroup parent)

    这个方法绝决返回值第posistion处的列表项

    5.1.创建一个学生信息录入,使用ListView展示信息baseAdapter

     

     

    布局

     
    
    <LinearLayout 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"
    
     
    
        android:orientation="vertical"
    
     
    
        android:paddingBottom="@dimen/activity_vertical_margin"
    
     
    
        android:paddingLeft="@dimen/activity_horizontal_margin"
    
     
    
        android:paddingRight="@dimen/activity_horizontal_margin"
    
     
    
        android:paddingTop="@dimen/activity_vertical_margin"
    
     
    
        tools:context=".MainActivity" >
    
     
    
     
    
     
    
        <TextView
    
     
    
            android:layout_width="match_parent"
    
     
    
            android:layout_height="wrap_content"
    
     
    
            android:gravity="center_horizontal"
    
     
    
            android:text="学生信息管理系统"
    
     
    
            android:textColor="#77ff0000"
    
     
    
            android:textSize="29sp" />
    
     
    
     
    
     
    
        <EditText
    
     
    
            android:id="@+id/et_name"
    
     
    
            android:layout_width="match_parent"
    
     
    
            android:layout_height="wrap_content"
    
     
    
            android:hint="请输入学生姓名" />
    
     
    
        <!-- 性别 -->
    
     
    
     
    
     
    
        <RadioGroup
    
     
    
            android:id="@+id/rgp"
    
     
    
            android:layout_width="match_parent"
    
     
    
            android:layout_height="wrap_content"
    
     
    
            android:orientation="horizontal" >
    
     
    
     
    
     
    
            <!-- 性别男 -->
    
     
    
     
    
     
    
            <RadioButton
    
     
    
                android:id="@+id/rb_male"
    
     
    
                android:layout_width="0dp"
    
     
    
                android:layout_height="wrap_content"
    
     
    
                android:layout_weight="1"
    
     
    
                android:checked="true"
    
     
    
                android:text="male" />
    
     
    
            <!-- 性别女 -->
    
     
    
     
    
     
    
            <RadioButton
    
     
    
                android:id="@+id/rb_female"
    
     
    
                android:layout_width="0dp"
    
     
    
                android:layout_height="wrap_content"
    
     
    
                android:layout_weight="1"
    
     
    
                android:text="female" />
    
     
    
        </RadioGroup>
    
     
    
     
    
     
    
        <!-- 保存 -->
    
     
    
     
    
     
    
        <Button
    
     
    
            android:id="@+id/btn_save"
    
     
    
            android:layout_width="match_parent"
    
     
    
            android:layout_height="wrap_content"
    
     
    
            android:text="保存" />
    
     
    
        <!-- 查询 -->
    
     
    
     
    
     
    
        <Button
    
     
    
            android:id="@+id/btn_querty"
    
     
    
            android:layout_width="match_parent"
    
     
    
            android:layout_height="wrap_content"
    
     
    
            android:text="查询全部学生信息" />
    
     
    
     
    
     
    
        <ListView
    
     
    
            android:id="@+id/lv_item"
    
     
    
            android:layout_width="match_parent"
    
     
    
            android:layout_height="match_parent"
    
     
    
            android:divider="#ff0000"
    
     
    
            android:dividerHeight="2dp">
    
     
    
        </ListView>
    
     
    
     
    
     
    
    </LinearLayout>
    
     
    
     
    
     
    View Code

     

    ListView要使用的布局

     

     
    
     
    
    <?xml version="1.0" encoding="utf-8"?>
    
     
    
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    
     
    
        android:layout_width="match_parent"
    
     
    
        android:layout_height="wrap_content" >
    
     
    
     
    
     
    
        <ImageView
    
     
    
            android:id="@+id/iv_sex"
    
     
    
            android:layout_width="wrap_content"
    
     
    
            android:layout_height="wrap_content"
    
     
    
            android:layout_centerVertical="true"
    
     
    
            android:layout_margin="20dp"
    
     
    
            android:src="@drawable/mr" />
    
     
    
     
    
     
    
        <RelativeLayout
    
     
    
            android:layout_width="match_parent"
    
     
    
            android:layout_height="wrap_content"
    
     
    
            android:layout_margin="10dp"
    
     
    
            android:layout_toRightOf="@id/iv_sex" >
    
     
    
     
    
     
    
            <TextView
    
     
    
                android:id="@+id/tv_no"
    
     
    
                android:layout_width="wrap_content"
    
     
    
                android:layout_height="wrap_content"
    
     
    
                android:text="学号" />
    
     
    
     
    
     
    
            <TextView
    
     
    
                android:id="@+id/tv_name"
    
     
    
                android:layout_width="wrap_content"
    
     
    
                android:layout_height="wrap_content"
    
     
    
                android:layout_below="@id/tv_no"
    
     
    
                android:text="姓名" />
    
     
    
     
    
     
    
            <ImageView
    
     
    
                android:id="@+id/iv_delete"
    
     
    
                android:layout_width="wrap_content"
    
     
    
                android:layout_height="wrap_content"
    
     
    
                android:layout_alignParentRight="true"
    
     
    
                android:layout_centerVertical="true"
    
     
    
                android:layout_margin="20dp"
    
     
    
                android:src="@drawable/delete" />
    
     
    
        </RelativeLayout>
    
     
    
     
    
     
    
    </RelativeLayout>
    
     
    
     
    
     
    View Code

     

    数据库创建类

    /**
    
     
    
     * 数据库创建类,与维护的类 继承SQLiteOpenHelper
    
     
    
         
    
     
    
     * @author 刘楠
    
     
    
     *
    
     
    
     * 2016-2-20下午6:32:00
    
     
    
     */
    
     
    
    public class StudentSqliteOpenHelper extends SQLiteOpenHelper {
    
     
    
     
    
     
    
           private static final String TAG = "StudentSqliteOpenHelper";
    
     
    
     
    
     
    
           public StudentSqliteOpenHelper(Context context) {
    
     
    
                  super(context, "student.db", null, 2);
    
     
    
           }
    
     
    
     
    
     
    
           /**
    
     
    
            * 创建数据库时,执行一次,只执行一次
    
     
    
            * 用来创建数据表
    
     
    
            */
    
     
    
           @Override
    
     
    
           public void onCreate(SQLiteDatabase db) {
    
     
    
                  Log.i(TAG, "onCreate执行了");
    
     
    
                  //获取原来的版本,获取不到为0
    
     
    
                  int version = db.getVersion();
    
     
    
                  if(version==0){
    
     
    
                         //创建表
    
     
    
                         String sql= "create table students ( _id integer primary key autoincrement,  name varchar(30),gender varchar(10))";
    
     
    
                         db.execSQL(sql);
    
     
    
                  }else{
    
     
    
                         //创建表
    
     
    
                         String sql= "create table students ( _id integer primary key autoincrement,  name varchar(30))";
    
     
    
                         db.execSQL(sql);
    
     
    
                  }
    
     
    
           }
    
     
    
     
    
     
    
           /**
    
     
    
            * 当数据库版本发生变化时执行
    
     
    
            */
    
     
    
           @Override
    
     
    
           public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    
     
    
                  Log.i(TAG, "onUpgrade执行了");
    
     
    
                
    
     
    
                  switch (oldVersion) {
    
     
    
                  case 1:
    
     
    
                         String sql= "alter table students add gender varchar(10)";
    
     
    
                         db.execSQL(sql);
    
     
    
                         break;
    
     
    
                  case 2:
    
     
    
                       
    
     
    
                         break;
    
     
    
     
    
     
    
                  default:
    
     
    
                         break;
    
     
    
                  }
    
     
    
           }
    
     
    
     
    
     
    
    }
    
     
    
     
    
     
    
     
    View Code

     

     

    实体类

     
    
     
    
    /**
    
     
    
     * 学生的封装类
    
     
    
     *
    
     
    
     * @author 刘楠
    
     
    
     *
    
     
    
     *         2016-2-20下午6:31:20
    
     
    
     */
    
     
    
    public class Student {
    
     
    
     
    
     
    
           /*
    
     
    
            * ID
    
     
    
            */
    
     
    
           private int id;
    
     
    
           /*
    
     
    
            * 姓名
    
     
    
            */
    
     
    
           private String name;
    
     
    
           /*
    
     
    
            * 性别
    
     
    
            */
    
     
    
           private String gender;
    
     
    
     
    
     
    
           public Student() {
    
     
    
                  super();
    
     
    
           }
    
     
    
     
    
     
    
           public Student(int id, String name, String gender) {
    
     
    
                  super();
    
     
    
                  this.id = id;
    
     
    
                  this.name = name;
    
     
    
                  this.gender = gender;
    
     
    
           }
    
     
    
     
    
     
    
           public String getGender() {
    
     
    
                  return gender;
    
     
    
           }
    
     
    
     
    
     
    
           public int getId() {
    
     
    
                  return id;
    
     
    
           }
    
     
    
     
    
     
    
           public String getName() {
    
     
    
                  return name;
    
     
    
           }
    
     
    
     
    
     
    
           public void setGender(String gender) {
    
     
    
                  this.gender = gender;
    
     
    
           }
    
     
    
     
    
     
    
           public void setId(int id) {
    
     
    
                  this.id = id;
    
     
    
           }
    
     
    
     
    
     
    
           public void setName(String name) {
    
     
    
                  this.name = name;
    
     
    
           }
    
     
    
     
    
     
    
    }
    
     
    
     
    
     
    View Code

     

    数据库工具类

     

     
    
    /**
    
     
    
     * 学生数据库访问工具类
    
     
    
     *
    
     
    
     * @author 刘楠
    
     
    
     *
    
     
    
     *         2016-2-20下午6:45:03
    
     
    
     */
    
     
    
    public class StudentDao {
    
     
    
     
    
     
    
           /*
    
     
    
            * 数据库创建更新类
    
     
    
            */
    
     
    
           private StudentSqliteOpenHelper helper;
    
     
    
     
    
     
    
           public StudentDao(Context context) {
    
     
    
                  helper = new StudentSqliteOpenHelper(context);
    
     
    
           }
    
     
    
     
    
     
    
           /**
    
     
    
            * 插入一条记录
    
     
    
            *
    
     
    
            * @param name
    
     
    
            *            姓名
    
     
    
            * @param gender
    
     
    
            *            性别
    
     
    
            * @return 返回插入后的_id
    
     
    
            */
    
     
    
           public long insert(String name, String gender) {
    
     
    
                  // 获取数据库
    
     
    
                  SQLiteDatabase db = helper.getWritableDatabase();
    
     
    
     
    
     
    
                  // 插入的列
    
     
    
                  String nullColumnHack = "values(null,?,?)";
    
     
    
                  // 占位符
    
     
    
                  ContentValues values = new ContentValues();
    
     
    
                  values.put("name", name);
    
     
    
                  values.put("gender", gender);
    
     
    
                  // 执行
    
     
    
                  long insert = db.insert("students", nullColumnHack, values);
    
     
    
                  // 关闭连接
    
     
    
                  db.close();
    
     
    
                  return insert;
    
     
    
           }
    
     
    
     
    
     
    
           /**
    
     
    
            * 修改一条记录
    
     
    
            *
    
     
    
            * @param name
    
     
    
            *            姓名
    
     
    
            * @param gender
    
     
    
            *            性别
    
     
    
            * @return 返回插入后的_id
    
     
    
            */
    
     
    
           public long update(String name, String gender) {
    
     
    
                  // 获取数据库
    
     
    
                  SQLiteDatabase db = helper.getWritableDatabase();
    
     
    
     
    
     
    
                  // 插入的列
    
     
    
     
    
     
    
                  // 占位符
    
     
    
                  ContentValues values = new ContentValues();
    
     
    
                  values.put("gender", gender);
    
     
    
                  // 执行
    
     
    
                  int update = db.update("students", values, "name = ?",
    
     
    
                                new String[] { name });
    
     
    
                  // 关闭连接
    
     
    
                  db.close();
    
     
    
                  return update;
    
     
    
           }
    
     
    
     
    
     
    
           /**
    
     
    
            * 删除一条记录
    
     
    
            *
    
     
    
            * @param name
    
     
    
            *            姓名
    
     
    
            *
    
     
    
            * @return 返回删除后的_id
    
     
    
            */
    
     
    
           public int delete(String name) {
    
     
    
                  // 获取数据库
    
     
    
                  SQLiteDatabase db = helper.getWritableDatabase();
    
     
    
     
    
     
    
                  // 执行
    
     
    
                  int delete = db.delete("students", "name = ?", new String[] { name });
    
     
    
                  // 关闭连接
    
     
    
                  db.close();
    
     
    
                  return delete;
    
     
    
           }
    
     
    
     
    
     
    
           /**
    
     
    
            * 查询全部学生信息
    
     
    
            *
    
     
    
            * @return
    
     
    
            */
    
     
    
           public List<Student> getAll() {
    
     
    
                  // 容器
    
     
    
                  List<Student> list = new ArrayList<Student>();
    
     
    
                  // 获取数据库
    
     
    
                  SQLiteDatabase db = helper.getReadableDatabase();
    
     
    
                  String[] columns = { "_id", "name", "gender" };
    
     
    
                  Cursor cursor = db.query("students", columns, null, null, null, null,
    
     
    
                                null);
    
     
    
     
    
     
    
                  while (cursor.moveToNext()) {
    
     
    
                         int id = cursor.getInt(cursor.getColumnIndex("_id"));
    
     
    
                         String name = cursor.getString(cursor.getColumnIndex("name"));
    
     
    
                         String gender = cursor.getString(cursor.getColumnIndex("gender"));
    
     
    
                         // 添加到集合中
    
     
    
                         list.add(new Student(id, name, gender));
    
     
    
                  }
    
     
    
                  // 关闭游标
    
     
    
                  cursor.close();
    
     
    
                  // 关闭
    
     
    
                  db.close();
    
     
    
                  return list;
    
     
    
           }
    
     
    
     
    
     
    
    }
    
     
    
     
    View Code

     

    Activity

     

    /**

     

     * 学生管理信息系统Activity

     
    
     * 步骤
    
     
    
     * 1.获取用户输入姓名与选择的性别
    
     
    
     * 2.判断是否为空,为空就提示,不为空
    
     
    
     * 3.保存数据
    
     
    
     * 4.点击查询,在下方的ListView中显示所有的学生信息
    
     
    
     * 5.为ListView设置BaseAdapter
    
     
    
     * 6.实现getCount与getView方法
    
     
    
     * 7.返回view
    
     
    
     * 8.点击删除,弹出提示对话框,
    
     
    
     * 9.取消什么也不做,确定就删除当前记录    
    
     
    
     * @author 刘楠
    
     
    
     *
    
     
    
     * 2016-2-20下午8:59:43
    
     
    
     */
    
     
    
    public class MainActivity extends Activity implements OnClickListener {
    
     
    
     
    
     
    
           /*
    
     
    
            * 姓名
    
     
    
            */
    
     
    
           private EditText et_name;
    
     
    
           /*
    
     
    
            * 性别
    
     
    
            */
    
     
    
           private RadioGroup rgp;
    
     
    
           /*
    
     
    
            * 保存
    
     
    
            */
    
     
    
           private Button btn_save;
    
     
    
           /*
    
     
    
            * 查询
    
     
    
            */
    
     
    
           private Button btn_querty;
    
     
    
           /*
    
     
    
            * 学生列表
    
     
    
            */
    
     
    
           private ListView lv_item;
    
     
    
           /*
    
     
    
            * 学生表数据库操作类
    
     
    
            */
    
     
    
           private StudentDao studentDao;
    
     
    
           /*
    
     
    
            * 学生列表
    
     
    
            */
    
     
    
           private List<Student> list;
    
     
    
           /*
    
     
    
            * 学生列表适配器
    
     
    
            */
    
     
    
           private StuBaseAdapter stuBaseAdapter;
    
     
    
     
    
     
    
           @Override
    
     
    
           protected void onCreate(Bundle savedInstanceState) {
    
     
    
                  super.onCreate(savedInstanceState);
    
     
    
                  setContentView(R.layout.activity_main);
    
     
    
     
    
     
    
                  et_name = (EditText) findViewById(R.id.et_name);
    
     
    
     
    
     
    
                  rgp = (RadioGroup) findViewById(R.id.rgp);
    
     
    
     
    
     
    
                  btn_save = (Button) findViewById(R.id.btn_save);
    
     
    
                  btn_querty = (Button) findViewById(R.id.btn_querty);
    
     
    
     
    
     
    
                  lv_item = (ListView) findViewById(R.id.lv_item);
    
     
    
                  /*
    
     
    
                   * 初始化数据库学生表的工具类
    
     
    
                   */
    
     
    
                  studentDao = new StudentDao(this);
    
     
    
                  /*
    
     
    
                   * 设置监听事件
    
     
    
                   */
    
     
    
                  btn_save.setOnClickListener(this);
    
     
    
                  btn_querty.setOnClickListener(this);
    
     
    
     
    
     
    
           }
    
     
    
     
    
     
    
           /**
    
     
    
            * 单击事件监听器
    
     
    
            */
    
     
    
           @Override
    
     
    
           public void onClick(View v) {
    
     
    
                  switch (v.getId()) {
    
     
    
                  case R.id.btn_save:
    
     
    
                         // 保存
    
     
    
                         save();
    
     
    
                         break;
    
     
    
                  case R.id.btn_querty:
    
     
    
                         // 查询
    
     
    
                         query();
    
     
    
                         break;
    
     
    
                  }
    
     
    
     
    
     
    
           }
    
     
    
     
    
     
    
           /**
    
     
    
            * 查询学生列表
    
     
    
            */
    
     
    
           private void query() {
    
     
    
     
    
     
    
                  refresh();
    
     
    
           }
    
     
    
     
    
     
    
           private void refresh() {
    
     
    
                  /*
    
     
    
                   * 查询全部学生信息
    
     
    
                   */
    
     
    
                  list = studentDao.getAll();
    
     
    
                  if (stuBaseAdapter == null) {
    
     
    
                         // 判断 为空就new ,为ListView设置适配器
    
     
    
                         stuBaseAdapter = new StuBaseAdapter();
    
     
    
                         lv_item.setAdapter(stuBaseAdapter);
    
     
    
                  } else {
    
     
    
                         // 通知ListView列表改变
    
     
    
                         stuBaseAdapter.notifyDataSetChanged();
    
     
    
                  }
    
     
    
           }
    
     
    
     
    
     
    
           /**
    
     
    
            * 保存学生信息
    
     
    
            */
    
     
    
           private void save() {
    
     
    
     
    
     
    
                  // 获取学生输入的信息
    
     
    
                  String name = et_name.getText().toString().trim();
    
     
    
                  // 判断
    
     
    
                  if (TextUtils.isEmpty(name)) {
    
     
    
                         Toast.makeText(this, "学生姓名不能为空", Toast.LENGTH_SHORT).show();
    
     
    
                         return;
    
     
    
                  }
    
     
    
     
    
     
    
                  // 获取性别
    
     
    
                  String gender = "male";
    
     
    
                  switch (rgp.getCheckedRadioButtonId()) {
    
     
    
                  case R.id.rb_male:
    
     
    
                         gender = "male";
    
     
    
                         break;
    
     
    
                  case R.id.rb_female:
    
     
    
                         gender = "female";
    
     
    
                         break;
    
     
    
                  }
    
     
    
     
    
     
    
                  // 开始保存
    
     
    
                  long insert = studentDao.insert(name, gender);
    
     
    
                  if (insert > 0) {
    
     
    
                         Toast.makeText(this, "保存成功", Toast.LENGTH_SHORT).show();
    
     
    
                         et_name.setText("");
    
     
    
     
    
     
    
                  } else {
    
     
    
                         Toast.makeText(this, "保存失败", Toast.LENGTH_SHORT).show();
    
     
    
     
    
     
    
                  }
    
     
    
           }
    
     
    
     
    
     
    
           /**
    
     
    
            * 学生列表适配器
    
     
    
            *
    
     
    
            * @author 刘楠
    
     
    
            *
    
     
    
            *         2016-2-20下午7:28:15
    
     
    
            */
    
     
    
           private class StuBaseAdapter extends BaseAdapter {
    
     
    
     
    
     
    
                  private static final String TAG = "StuBaseAdapter";
    
     
    
     
    
     
    
                  @Override
    
     
    
                  public int getCount() {
    
     
    
                         return list.size();
    
     
    
                  }
    
     
    
     
    
     
    
                  @Override
    
     
    
                  public View getView(int position, View convertView, ViewGroup parent) {
    
     
    
     
    
     
    
                         Log.i(TAG, position + "");
    
     
    
                         View view;
    
     
    
                         if (convertView == null) {
    
     
    
                                view = View.inflate(MainActivity.this, R.layout.stu_item, null);
    
     
    
                         } else {
    
     
    
                                view = convertView;
    
     
    
                         }
    
     
    
                         // 得到学生对象
    
     
    
                         final Student student = list.get(position);
    
     
    
     
    
     
    
                         ImageView iv_sex = (ImageView) view.findViewById(R.id.iv_sex);
    
     
    
     
    
     
    
                         if ("male".equals(student.getGender())) {
    
     
    
                                iv_sex.setImageResource(R.drawable.mr);
    
     
    
                         } else if ("female".equals(student.getGender())) {
    
     
    
                                iv_sex.setImageResource(R.drawable.miss);
    
     
    
                         }
    
     
    
                         TextView tv_no = (TextView) view.findViewById(R.id.tv_no);
    
     
    
                         tv_no.setText("编号:" + student.getId());
    
     
    
     
    
     
    
                         TextView tv_name = (TextView) view.findViewById(R.id.tv_name);
    
     
    
                         tv_name.setText("姓名:" + student.getName());
    
     
    
     
    
     
    
                         ImageView iv_delete = (ImageView) view.findViewById(R.id.iv_delete);
    
     
    
     
    
     
    
                         iv_delete.setOnClickListener(new OnClickListener() {
    
     
    
     
    
     
    
                                @Override
    
     
    
                                public void onClick(View v) {
    
     
    
                                       // 对话框来提示用户是否删除
    
     
    
                                       AlertDialog.Builder builder = new AlertDialog.Builder(
    
     
    
                                                     MainActivity.this);
    
     
    
     
    
     
    
                                       builder.setTitle("删除").setIcon(R.drawable.tools)
    
     
    
                                                     .setMessage("确定要删除这条记录吗");
    
     
    
                                       builder.setPositiveButton("确定",
    
     
    
                                                     new DialogInterface.OnClickListener() {
    
     
    
     
    
     
    
                                                            @Override
    
     
    
                                                            public void onClick(DialogInterface dialog,int which) {
    
     
    
     
    
     
    
                                                                   /*
    
     
    
                                                                    * 删除方法
    
     
    
                                                                    */
    
     
    
                                                                   int delete = studentDao.delete(student.getName());
    
     
    
                                                                   if (delete > 0) {
    
     
    
                                                                          Toast.makeText(MainActivity.this, "删除成功",
    
     
    
                                                                                        Toast.LENGTH_SHORT).show();
    
     
    
                                                                          // 刷新列表
    
     
    
                                                                          refresh();
    
     
    
                                                                   } else {
    
     
    
                                                                          Toast.makeText(MainActivity.this, "删除失败",
    
     
    
                                                                                        Toast.LENGTH_SHORT).show();
    
     
    
                                                                   }
    
     
    
                                                                  
    
     
    
                                                            }
    
     
    
     
    
     
    
                                                     });
    
     
    
     
    
     
    
                                       builder.setNegativeButton("取消", null);
    
     
    
                                       builder.create().show();
    
     
    
     
    
     
    
                                }
    
     
    
                         });
    
     
    
     
    
     
    
                         return view;
    
     
    
                  }
    
     
    
     
    
     
    
                  @Override
    
     
    
                  public Object getItem(int position) {
    
     
    
                         return position;
    
     
    
                  }
    
     
    
     
    
     
    
                  @Override
    
     
    
                  public long getItemId(int position) {
    
     
    
                         return position;
    
     
    
                  }
    
     
    
     
    
     
    
           }
    
     
    
     
    
     
    
    }
    View Code

     

     

     

     

     

     

    6.GridView与ExpandableListView

    GridView:和ListView有共同的父类,都是AbsListView,与ListView很相似

    区别:ListView只显示一列

    GridView可以显示多列

    numcolumns:属性可以设置显示列数

    其它用法与ListView一样

    7.Spinner

    Spinner其实就是一个列表选择框,弹出一个菜单提供用户选择,

    也需要设置Adapter

    entries:使用XML资源文件数据设置下拉菜单

    pupupBackground:列表 选择框的背景色

    prompt:提示信息

    7.1  xml

     
    
    <?xml version="1.0" encoding="utf-8"?>
    
    <resources>
    
        <string-array name="books">
    
            <item>疯狂JAVA讲义</item>
    
            <item>Android</item>
    
            <item>JAVA EE企业应用</item>
    
            <item>Android 第一行代码</item>
    
        </string-array>
    
    </resources>
    
    

    7.2  Avtivity

    /**
    
     * Spinner实现
    
     * 设置适配器
    
     * @author  刘楠
    
     */
    
    public class MainActivity extends AppCompatActivity {
    
    
    
        //Spinner
    
        private Spinner spinner;
    
    
    
        private String [] names={"东邪","西毒","南帝","北丐","中神通"};
    
        @Override
    
        protected void onCreate(Bundle savedInstanceState) {
    
            super.onCreate(savedInstanceState);
    
            setContentView(R.layout.activity_main);
    
            spinner = (Spinner) findViewById(R.id.spinner);
    
    
    
            //设置适配器
    
            ArrayAdapter<String> arrayAdapter
    
                    = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,names);
    
    
    
            spinner.setAdapter(arrayAdapter);
    
        }
    
    }
     
    
    
    <?xml version="1.0" encoding="utf-8"?>
    
    <LinearLayout
    
        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"
    
        android:orientation="vertical"
    
        android:paddingBottom="@dimen/activity_vertical_margin"
    
        android:paddingLeft="@dimen/activity_horizontal_margin"
    
        android:paddingRight="@dimen/activity_horizontal_margin"
    
        android:paddingTop="@dimen/activity_vertical_margin"
    
        tools:context="com.itheima.spinner.MainActivity">
    
    
    
    <!--
    
    第一个Spinner使用entries配置XML资源
    
    -->
    
        <Spinner
    
            android:layout_width="match_parent"
    
            android:layout_height="wrap_content"
    
            android:entries="@array/books">
    
    
    
        </Spinner>
    
    <!--
    
    第二个没有配置,
    
    在Activity中设置Adapter
    
    -->
    
        <Spinner
    
            android:id="@+id/spinner"
    
            android:layout_width="match_parent"
    
            android:layout_height="wrap_content">
    
    
    
        </Spinner>
    
    
    
    </LinearLayout>
     

    8.AdapterViewFlipper的功能与用法

    AdapterViewFlipper继承了AdapterViewAnimator,它也会显示Adapter提供的多个级件,但它每次只能显示一个View组件,程序可以通过showPrevious()和showNext()方法控制显示上一个,下一个,

    使用startFlipper()控件自动播放

    stopFlipper()停止播放

    8.1属性:

    animateFirstView:第一个View是否使用动画

    inAnimation:显示时使用动画

    loopViews:循环到最后一个时,是否自动转头到第一个

    outAanimation:设置组件隐藏时使用的动画

    autoStrat()是否自动播放

    flipInterval():设置自动播放的时间

    8.2自动播放图片

    布局文件

    <?xml version="1.0" encoding="utf-8"?>
    
    <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"
    
        android:paddingBottom="@dimen/activity_vertical_margin"
    
        android:paddingLeft="@dimen/activity_horizontal_margin"
    
        android:paddingRight="@dimen/activity_horizontal_margin"
    
        android:paddingTop="@dimen/activity_vertical_margin"
    
        tools:context="com.itheima.adapterviewflipper.MainActivity">
    
    
    
        <!--
    
       flipInterval 5秒显示时间
    
       layout_alignParentTop与父窗体顶部对齐
    
        -->
    
        <AdapterViewFlipper
    
            android:id="@+id/flipper"
    
            android:layout_width="match_parent"
    
            android:layout_height="match_parent"
    
            android:layout_alignParentTop="true"
    
            android:flipInterval="5000"/>
    
    
    
    
    
        <Button
    
            android:layout_alignParentBottom="true"
    
            android:layout_width="wrap_content"
    
            android:layout_height="wrap_content"
    
            android:onClick="prev"
    
            android:text="上一个"/>
    
    
    
        <Button
    
            android:layout_alignParentBottom="true"
    
            android:layout_centerHorizontal="true"
    
            android:layout_width="wrap_content"
    
            android:layout_height="wrap_content"
    
            android:onClick="auto"
    
            android:text="自动播放"/>
    
    
    
        <Button
    
            android:layout_alignParentRight="true"
    
            android:layout_alignParentBottom="true"
    
            android:layout_width="wrap_content"
    
            android:layout_height="wrap_content"
    
            android:onClick="next"
    
            android:text="下一个"/>
    
    </RelativeLayout>
     
    
     
    
    Adapter填充的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="match_parent">
    
    
    
        <ImageView
    
            android:id="@+id/iv_display"
    
            android:layout_width="match_parent"
    
            android:layout_height="match_parent">
    
    
    
        </ImageView>
    
    
    
    </LinearLayout>

    Activity实现

    /**
    
     * AdapterViewFlipper
    
     * 步骤1.获取flipper
    
     * 2.创建资源与适配器
    
     * 3.为flipper设置适配器
    
     *
    
     * @author 刘楠
    
     */
    
    public class MainActivity extends AppCompatActivity {
    
    
    
        /*
    
            flipper
    
         */
    
        private AdapterViewFlipper flipper;
    
        /*
    
        资源图片
    
         */
    
        private int[] imageIds = new int[]
    
                {
    
                        R.drawable.shuangzi, R.drawable.shuangyu,
    
                        R.drawable.chunv, R.drawable.tiancheng, R.drawable.tianxie,
    
                        R.drawable.sheshou, R.drawable.juxie, R.drawable.shuiping,
    
                        R.drawable.shizi, R.drawable.baiyang, R.drawable.jinniu,
    
                        R.drawable.mojie};
    
    
    
        @Override
    
        protected void onCreate(Bundle savedInstanceState) {
    
            super.onCreate(savedInstanceState);
    
            setContentView(R.layout.activity_main);
    
    
    
            flipper = (AdapterViewFlipper) findViewById(R.id.flipper);
    
    
    
    
    
            //声明适配器
    
            BaseAdapter baseAdapter = new BaseAdapter() {
    
                @Override
    
                public int getCount() {
    
                    return imageIds.length;
    
                }
    
    
    
                @Override
    
                public Object getItem(int position) {
    
                    return position;
    
                }
    
    
    
                @Override
    
                public long getItemId(int position) {
    
                    return position;
    
                }
    
    
    
                @Override
    
                public View getView(int position, View convertView, ViewGroup parent) {
    
    
    
                    View view;
    
                    if (convertView == null) {
    
                        view = View.inflate(MainActivity.this, R.layout.images, null);
    
                    } else {
    
                        view = convertView;
    
                    }
    
    
    
                    ImageView display = (ImageView) view.findViewById(R.id.iv_display);
    
                    //设置图片资源
    
                    display.setImageResource(imageIds[position]);
    
                    //设置ImageView的缩放类型
    
                    display.setScaleType(ImageView.ScaleType.FIT_XY);
    
    
    
                    return view;
    
                }
    
            };
    
    
    
            //设置适配器
    
            flipper.setAdapter(baseAdapter);
    
        }
    
    
    
    
    
        /**
    
         * 上一张
    
         *
    
         * @param v
    
         */
    
        public void prev(View v) {
    
            flipper.showPrevious();
    
            flipper.stopFlipping();
    
    
    
        }
    
    
    
        /**
    
         * 自动播放
    
         *
    
         * @param v
    
         */
    
        public void auto(View v) {
    
            flipper.startFlipping();
    
    
    
        }
    
    
    
        /**
    
         * 下一张
    
         *
    
         * @param v
    
         */
    
        public void next(View v) {
    
            flipper.showNext();
    
            flipper.stopFlipping();
    
    
    
        }
    
    }

    9.StackView功能与用法

     

    StackView也是AdapterViewAnimator的子类

    它也是用于显示Adapter提供的一系列View的.StackView将会心堆叠Stack的方式来显示多个列表项

    拖走StackView中处于顶端的View,下一View将会显示出来,将上一个View拖进StackView,将进显示 出来

    showNext(),show()Previous()控制显示下一个与上一个

    9.1布局

    <?xml version="1.0" encoding="utf-8"?>
    
    <LinearLayout
    
        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"
    
        android:orientation="horizontal"
    
        tools:context="com.itheima.stackview.MainActivity">
    
    
    
       <StackView
    
           android:id="@+id/stackView"
    
           android:layout_width="match_parent"
    
           android:layout_height="wrap_content"
    
           android:loopViews="true">
    
    
    
       </StackView>
    
    
    
        <LinearLayout
    
            android:layout_width="match_parent"
    
            android:layout_height="wrap_content"
    
            android:orientation="horizontal">
    
    
    
            <Button
    
                android:onClick="prev"
    
                android:text="上一个"
    
                android:layout_width="wrap_content"
    
                android:layout_height="wrap_content"/>
    
    
    
            <Button
    
                android:onClick="next"
    
                android:text="下一个"
    
                android:layout_width="wrap_content"
    
                android:layout_height="wrap_content"/>
    
        </LinearLayout>
    
    </LinearLayout>

    填充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="match_parent">
    
    
    
        <ImageView
    
            android:id="@+id/iv_display"
    
            android:layout_width="wrap_content"
    
            android:layout_height="wrap_content"/>
    
    </LinearLayout>

    9.2 实现

    
    
    /**
    
     * StackView
    
     * 步骤
    
     * 1.获取stackview
    
     * 2.建立适配器与资源
    
     * 3.设置适配器
    
     */
    
    public class MainActivity extends AppCompatActivity {
    
        private StackView stackView;
    
        private int[] imageIds = new int[]
    
                {
    
                        R.drawable.bomb5, R.drawable.bomb6, R.drawable.bomb7
    
                        , R.drawable.bomb8, R.drawable.bomb9, R.drawable.bomb10
    
                        , R.drawable.bomb11, R.drawable.bomb12, R.drawable.bomb13
    
                        , R.drawable.bomb14, R.drawable.bomb15, R.drawable.bomb16
    
                };
    
    
    
        @Override
    
        protected void onCreate(Bundle savedInstanceState) {
    
            super.onCreate(savedInstanceState);
    
            setContentView(R.layout.activity_main);
    
    
    
    
    
            stackView = (StackView) findViewById(R.id.stackView);
    
    
    
            /*
    
            数据集合
    
             */
    
            List<Map<String, Object>> listItem = new ArrayList<Map<String, Object>>();
    
    
    
            for (int i = 0; i < imageIds.length; i++) {
    
                Map<String, Object> map = new HashMap<String, Object>();
    
    
    
                map.put("image", imageIds[i]);
    
                listItem.add(map);
    
            }
    
    
    
            SimpleAdapter simpleAdapter =
    
                    new SimpleAdapter(this, listItem, R.layout.images, new String[]{"image"}, new int[]{R.id.iv_display});
    
            //设置适配器
    
    
    
            stackView.setAdapter(simpleAdapter);
    
        }
    
    
    
        /**
    
         * 上一个
    
         */
    
        public void prev(View v){
    
    
    
            stackView.showPrevious();
    
        }
    
    
    
        /**
    
         * 下一个
    
         */
    
        public void next(View v){
    
            stackView.showNext();
    
        }
    
    
    
    }
     
  • 相关阅读:
    SQL Server 2008 Windows身份验证改为混合模式身份验证
    SQL中给datetime类型变量赋值
    结婚三周年特此@Mark一下
    搞笑的【国庆出游五大注意事项】
    利用SVNListParentPath增加http浏览仓库根目录的功能
    如果年底买不到CC就出手小指吧
    svn备份策略
    缺乏配置管理造成的常见问题
    高速公路开车必看的注意事项
    山雨欲来踏上Java学习之路
  • 原文地址:https://www.cnblogs.com/liunanjava/p/5205682.html
Copyright © 2011-2022 走看看