自定义ListView的使用及忧化(通俗易懂,原创)

自定义ListView的使用及忧化

    什么是ListView:翻译是列表视图,我们的QQ好友列表,今日头条的一条条新闻就是ListView。
    适配器:因为安卓APP开发框架本身就是MVC模式,所以为了将视图层和控制层关联起来,采用适配器机制来进行联系,适配器也是一种设计模式,通俗来讲可比作,我们的手机充电头,我们的手机需要5V直流,但电网是220V交流,所以充电头就起到一个转换的作用,将两者桥接起来。因为是自定义的ListView,所以适配器也要自定义,这里我们继承ArrayAdapter。
    ListView布局及其子布局:一般ListView占屏幕的很大部分,子布局的意思是ListView的每一项布局是怎么样的。ListView包含很多子布局。
    数据源:ListView中要加载很多数据,所以为了方便,我们新建了一个类来提供数据源。
    所以自定义ListView的编码过程可按如下方式:
    1、activity_main.xml放置一个ListView
    2、编写子布局
    3、编写数据源类,初始化数据
    4、装备适配器,将数据放进适配器中,关联子项布局
    5、将适配器与ListView关联。、

第一步:

<?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"
    tools:context=".activity.MainActivity">

    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/listView"
    ></ListView>
</LinearLayout>

第二步:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <TextView//子项布局,显示一行文字,
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="ooooooooo"
        android:id="@+id/fruit_name" />
</LinearLayout>

第三步:

public class fruit{//数据源类
    private String fruit_name;


    public fruit(String name){
        this.fruit_name=name;

    }
    public String getname(){
        return fruit_name;
    }

第四步:

public class fruitadapter extends ArrayAdapter<fruit>{
    private int ID;
    public fruitadapter(Context context, int textViewResourceId, List<fruit> objects){
            super(context,textViewResourceId,objects);
        ID=textViewResourceId;//存储textViewResourceId
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent){//每一项子项调用的时候自动调用,convertView用作缓存忧化。
        fruit ft = getItem(position);
        View view;
        ViewHolder viewHolder;
        if(convertView != null) {
            view=convertView;
            viewHolder = (ViewHolder)view.getTag();
        }
        else
        {
            view = LayoutInflater.from(getContext()).inflate(ID, null);
            viewHolder = new ViewHolder();
            viewHolder.textViewname=(TextView)view.findViewById(R.id.fruit_name);
            view.setTag(viewHolder);
        }

        viewHolder.textViewname.setText(ft.getname());
        return view;
    }

    class ViewHolder{//不必每必获取控件的实例。
        TextView textViewname;
    }
}

第五步:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        for (int i = 0; i < 100; i++) {//初始化数据
            fruitlist.add(new fruit("oooooooooo"));
        }
        fruitadapter adpter = new fruitadapter(MainActivity.this, R.layout.fruit_item, fruitlist);
        ListView listView = (ListView) findViewById(R.id.listView);
        listView.setAdapter(adpter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {//设置子项监听
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                fruit f = fruitlist.get(position);
                Toast.makeText(MainActivity.this, f.getname() + "  " + position, Toast.LENGTH_SHORT).show();
            }
        });


    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值