Android简单自定义view的实现

自定义view的使用在android中是非常常见的,在此,向大家介绍一个简单的以listview为容器的自定义view。


这是一个功能展示

Android简单自定义view的实现_第1张图片

首先,需要在layout文件夹里新建一个xml文件来决定每一个小item的构成,即listitem.xml

Android简单自定义view的实现_第2张图片

然后,我们定义一个listview来显示我们的一个个小item(不再赘述);

下面我们开始写适配器,首先,这是一个继承了baseadpter父类的适配器,需要在类里面自动加入一些函数(见代码),主要的声明:1.上下文             2.容器  3.布局加载器 4.数据源 ,需要注意的是要充分利用好历史缓存对象来实现一个显示优化;并且还有一个viewholder的优化方式需要注意。
接下来,就是在包含我们listview的activity文件中利用写好的adapter来完成数据的填充与显示。


以上就是一个简单自定义view的思路流程,具体代码见下。



这是adapter部分代码
package com.example.administrator.express.adapter;

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

import com.example.administrator.express.bean.bean_express;
import com.example.administrator.express.R;

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

/**
 * Created by Cerian on 2017/5/4.
 */

public class Adapter_express extends BaseAdapter {
    /**
     * 上下文
     * 容器
     * 布局加载器
     * 数据源
     */
    private Context context;
    private List mylist =new ArrayList<>();
    private LayoutInflater inflater;
    private bean_express bean;

    public Adapter_express(Context context, List mylist){
        this.context=context;
        this.mylist=mylist;
        inflater= (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
    }

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

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder vHolder=null;
        if(convertView==null){
            vHolder=new ViewHolder();
            convertView=inflater.inflate(R.layout.item_express,null);
            vHolder.tv_dateline= (TextView) convertView.findViewById(R.id.tv_datelinelist);
            vHolder.tv_ticket= (TextView) convertView.findViewById(R.id.tv_ticketlist);
            convertView.setTag(vHolder);
        }
        else{
            vHolder = (ViewHolder) convertView.getTag();
        }

        //设置数据
        bean= (bean_express) getItem(position);
        vHolder.tv_ticket.setText(bean.getTicket());
        vHolder.tv_dateline.setText(bean.getDataline());
        return convertView;

    }
    /* 优化*/
    class ViewHolder {
        private TextView tv_ticket;
        private TextView tv_dateline;
    }
}
这是数据源部分代码
package com.example.administrator.express.bean;

/**
 * Created by Cerian on 2017/5/4.
 */

public class bean_express {
    private  String ticket;
    private  String dataline;

    public String getTicket() {
        return ticket;
    }

    public void setTicket(String ticket) {
        this.ticket = ticket;
    }

    public String getDataline() {
        return dataline;
    }

    public void setDataline(String dataline) {
        this.dataline = dataline;
    }
这是包含listview的activity部分代码
package com.example.administrator.express.activity;

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

import com.example.administrator.express.adapter.Adapter_express;
import com.example.administrator.express.bean.bean_express;
import com.example.administrator.express.R;

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

public class listview_express extends AppCompatActivity {

    private ListView mListView;
    private List mlist=new ArrayList<>();
    private Adapter_express adapter;


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

        initview();
    }

    private void initview() {
        mListView = (ListView) findViewById(R.id.mlistview);
        bean_express bean = new bean_express();
        //循环添加快递item
        for(int i =0;i<3;i++) {
            bean.setDataline("11.25.18.00");
            bean.setTicket("15552");
            mlist.add(bean);
        }

        //setImageResource(drawable)
        adapter=new Adapter_express(this,mlist) ;
        mListView.setAdapter(adapter);
    }
}
如此一来,一个基本的自定义view就实现了,当然这只是一个很简单的自定义,像QQ,新浪新闻等等,都是从这种简单view演化而来。相信通过我们的努力,会有一个个更美而实用的自定义view在我们手中诞生。
以上内容若有不足,还望多多指正,谢谢。

你可能感兴趣的:(android)