为了账号安全,请及时绑定邮箱和手机立即绑定

℃江让您从精通到入门:ListView实例解读以及包名的命名习惯

标签:
Java Android
闲情撰文多反思,不使人间造孽钱
  • 笔者初心,向来不喜说道,前日反思,多废语连篇,不与人干货,今思虑有三,鄙人目有短视,不该舞文弄墨,故弄玄虚,伤读者老爷们之心。在此言说抱歉,望海涵。

  • 我撰文不挣一分,不拿一块,全凭心中好恶,一鼓作气,不读二遍,但技术不与它文同,技术之最大诱惑,在于其有一为一,严谨细致,不能有二,我为文一鼓作气不赖。但表文同之,个中问题随之而现,现今反思,尤为心惊。故今定矩有三:其一、字字而珠玑;其二、三日方成文;其三,不忘与己心;其四,理为理,不为人之理,道为道,必从头言道。

青,取之于蓝,而青于蓝;冰,水为之,而寒于水。

实例1、效果如下图:
ListViewDemo
现在来说道说道:简单说来,ListView应该是一个聪明的懒人发明的。他用这个方式,大大提高了工作效率。简单的文字列表,只需要四步:

第一步、声明数据、适配器以及你在布局文件中的
ListView,并且还要绑定ListView事件咯:
private String[] proNames; private ArrayAdapter<String> adapter; private ListView lvProlist;

第二步、准备数据
this.proNames = new String[]{"负离子去螨器", "多功能料理机", "多可必搅拌棒", "可可早餐机", "亚美面条机", "双立人料理蒸锅地网","...."};

第三步、视图层你有了个列表,但是列表里面的内容还没有填充,我这个是填充的文字,所以要有一个独立出来的布局文件:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="8dp"
    android:textColor="#A10000">

</TextView>

第四步、是准备并绑定适配器(准备适配器是为了找到布局内容,绑定适配器,是将listView再和适配器绑定):

  // 准备适配器
        this.adapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.lv_item, proNames);

        // 绑定适配器
        this.lvProlist.setAdapter(adapter);

而后就大功告成,源码地址如下:http://pan.baidu.com/s/1jHD7I9w


下面来看看ListView的进阶态:
这里写图片描述

  • 当ListView内容复杂的时候,我们的数据源也就变得复杂了,所以最好有个实体类,一般实体类一般放到了持久层中,适配器一般写在工具类里面,我这里只是举例子,所以持久层写到了一起:
  • 第一步、写出实体类:
package com.chinasoft.listviewdemo;

/**
 * Created by Arvin on 2017/2/20.
 */

public class Product {
    private int pid;
    private String name;
    private float price;
    private String desc;
    private int image;

    public Product(int pid, String name, float price, String desc, int image) {
        this.pid = pid;
        this.name = name;
        this.price = price;
        this.desc = desc;
        this.image = image;
    }

    public int getPid() {
        return pid;
    }

    public void setPid(int pid) {
        this.pid = pid;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public float getPrice() {
        return price;
    }

    public void setPrice(float price) {
        this.price = price;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    public int getImage() {
        return image;
    }

    public void setImage(int image) {
        this.image = image;
    }
}

第二步、写出适配器的工具类(要记得适配器一般和小布局属关联的,List和适配器是关联)适配器的作用是侨联就像口,胃之间有食道一样:

package com.chinasoft.listviewdemo;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;

/**
 * Created by Arvin on 2017/1/20.
 */

public class ProductListAdapter extends BaseAdapter {

    private Context context;
    private List<Product> products;

    public ProductListAdapter(Context context, List<Product> products) {
        this.context = context;
        this.products = products;
    }

    @Override
    public int getCount() {
        return products.size();
    }

    @Override
    public Object getItem(int position) {
        return products.get(position);
    }

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

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        // 获取小布局
        if(convertView == null){
            convertView = LayoutInflater.from(context).inflate(R.layout.lv_pro_item, null);
        }

        // 获取小布局中的组件
        ImageView ivProImage = (ImageView) convertView.findViewById(R.id.iv_pro_image);
        TextView tvProId = (TextView) convertView.findViewById(R.id.tv_pro_id);
        TextView tvProName = (TextView) convertView.findViewById(R.id.tv_pro_name);
        TextView tvProPrice = (TextView) convertView.findViewById(R.id.tv_pro_price);
        TextView tvProDesc = (TextView) convertView.findViewById(R.id.tv_pro_desc);

        // 给组件设置数据
        Product product = products.get(position);
        ivProImage.setImageResource(product.getImage());
        tvProId.setText(product.getPid()+"");
        tvProName.setText(product.getName());
        tvProPrice.setText("¥" + product.getPrice());
        tvProDesc.setText(product.getDesc());

        // 返回小布局视图
        return convertView;
    }
}

第三步、数据的初始化,以及新增操作:

package com.chinasoft.listviewdemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;

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

public class ProductShowActivity extends AppCompatActivity {

    private List<Product> products;
    private ListView lvProduct;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_product_show);

        this.lvProduct = (ListView) findViewById(R.id.lv_product);

        // 初始化产品数据
        this.products = new ArrayList<Product>();
        Product pro1 = new Product(1001,"艾静吸尘器",1200,"超静音八遍系成绩,能铣刀各个觉喽哦,不放过任何一个死角",R.drawable.pro01);
        products.add(pro1);
        Product pro2 = new Product(1002,"高级电饭锅",2388,"香喷喷的米饭由此而生",R.drawable.pro04);
        products.add(pro2);
        Product pro3 = new Product(1003,"负离子去螨器",890,"香喷喷的螨虫,你想如何处置", R.drawable.pro06);
        products.add(pro3);
        Product pro4 = new Product(1004,"多功能料理机",2359,"功能丰富,随心所欲。。。。", R.drawable.pro08);
        products.add(pro4);
        Product pro5 = new Product(1005,"多可必搅拌棒",300,"操作方便,随时随地都可以获取新鲜食物。",R.drawable.pro10);
        products.add(pro5);

        ProductListAdapter adapter = new ProductListAdapter(getApplicationContext(), products);
        this.lvProduct.setAdapter(adapter);
    }
}

布局文件就不写了,源代码地址如下:http://pan.baidu.com/s/1gfol6EZ


接下来跟大家聊聊开发规范中的“包名问题”,package的包名,其实很困扰初学者。对于许多成熟的开发者而言,不同的包里放不同的类,对于自身逻辑的梳理,很有帮助。下面来说说(大家还是先看图):
这里写图片描述
上图箭头所指的就是(部分)包名,包名的命名,其实也因人而异,所以介绍些常规的:

  1. dao:和数据库有关(DB)的操作类,一般写在这里面
  2. utils:一般放一些工具类,如有的人会在Android开发中,会把数据库的建表等操作放到这里。
  3. sqlite : 像我提供的范例图中那样,我把跟数据库有关的操作,放到了那里面~个人习惯。
  4. vo层:有的人也叫entity或者domain,这是持久层的意思,所谓持久嘛,放的都是一些实体类,一般这里面的东西是不会动的。
  5. fagment : 这里面放的就是一些Fragment,个人觉得和Activity差不多,但是有区别哟。
  6. common:通用工具包,我曾经在这里放过一些全局变量。
  7. adapter : 一般用在Android开发中,会写一些适配器,比如:ListView<>就需要适配器咯。
  8. application : 一般这个东西,都是系统自带的,但是要想自己写的话,记得要继承Application。
  9. service层:Service层主要负责业务模块的逻辑应用设计。
  10. controller层 :控制层,Android中,还真不常见到。
  11. ui:在Android开发中,有的程序员喜欢把跟布局有关的类,写在ui中,但是,有的人也喜欢写在外面,笔者属于第二种。
  12. view:这个其实多负责页面的表示。

    注:学问之最大不同,在于其底基相同,同样的语言,同样的架构,得出同样的道理,这很自然,故在此声明:如全文摘录,请注明出处。
    慕课网:http://www.imooc.com/u/4102287
    CSDN:http://blog.csdn.net/baidu_34750904
    简 书:http://www.jianshu.com/u/6db129d0ef0f

点击查看更多内容
5人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消