Android自定义样式listview

这个貌似很常用,以前会了现在正好用到了,所以就复习一下咯。

附上慕课网的视频地址,这个讲得hin详细http://www.imooc.com/learn/365

好了,步入正题,这里讲的就是要实现listview的样式自定义,就是把每个listview的item弄得花花绿绿的就是了。

首先,你要写一个item的layout,比如这里很简单,一个图片外加一个textview

<?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="match_parent">
    <ImageView

    android:id="@+id/item_img"
    android:layout_width="70dp"
    android:layout_height="70dp" />
    <TextView
        android:id="@+id/item_text"
        android:layout_toRightOf="@id/item_img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20dp"
        android:layout_centerInParent="true"
        android:text="123"/>
</RelativeLayout>

整好了这个,在你的layout里插入个listview

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:showIn="@layout/app_bar_main"
    tools:context=".MainActivity">

    <ListView
        android:id="@+id/data_list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"></ListView>
</RelativeLayout>

然后,重点来了,就是弄个适配器(adapter),这里的适配器的功能就是把内容和样式配一脸。

package ym.com.datamining;

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;
import java.util.Map;

/**
 * Created by Administrator on 2016/12/11.
 */
public class MyAdapter extends BaseAdapter {

    private List<Map<String,Object>> data; //这就是数据啦
    private Context context;                //这个是上下文啦,就是谁调用的这个
    private LayoutInflater layoutInflater;  //这是……据说是用来加载布局的

    public MyAdapter(Context context,List<Map<String,Object>> data){
        this.context=context;
        this.data=data;
        this.layoutInflater=LayoutInflater.from(context);

    }

    //就是看看一共多少项目
    @Override
    public int getCount() {
        return data.size();
    }
    //获得某一个位置的具体内容
    @Override
    public Object getItem(int position) {
        return data.get(position);
    }

    //这个,额,据说是获取唯一标识,但是感觉完全没什么卵用啊
    @Override
    public long getItemId(int position) {
        return position;
    }

    //组件的类
    public final class Widget{
        public ImageView img;
        public TextView text;
    }


    //这个就是重点啦,把数据和view合在一起
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Widget widget=null;
        //就是,那个listview有个缓存机制,会把以前有的东西缓存在convertView里
        if(convertView == null){
            widget=new Widget();
            convertView= layoutInflater.inflate(R.layout.list_item_layout,null);
            widget.img= (ImageView) convertView.findViewById(R.id.item_img);
            widget.text= (TextView) convertView.findViewById(R.id.item_text);
            //将组件与convertView联系起来
            convertView.setTag(widget);
        }else{
            widget=(Widget)convertView.getTag();
        }

        widget.img.setImageResource((Integer)data.get(position).get("image"));
        widget.text.setText((String)data.get(position).get("title"));

        return convertView;
    }
}

再之后,就是在你用到的activity里鼓捣鼓捣

listView= (ListView) findViewById(R.id.data_list);
        List<Map<String,Object>> list=getData();
        listView.setAdapter(new MyAdapter(this,list));

这是getData()方法

private List<Map<String,Object>> getData(){
        List<Map<String,Object>> list=new ArrayList<Map<String, Object>>();
        int[] imgId=new int[]{R.mipmap.s1,R.mipmap.s2,R.mipmap.s3,R.mipmap.s4,R.mipmap.s5,R.mipmap.s6,
                R.mipmap.s7,R.mipmap.s8,R.mipmap.s9,R.mipmap.s10};
        String[] text=new String[]{
                "(数据挖掘十大经典算法)\nC4.5","(数据挖掘十大经典算法)\nK-Means算法","(数据挖掘十大经典算法)\nSupport vector machines",
                "(数据挖掘十大经典算法)\nThe Apriori algorithm","(数据挖掘十大经典算法)\n最大期望(EM)算法","(数据挖掘十大经典算法)\nPageRank",
                "(数据挖掘十大经典算法)\nAdaBoost","(数据挖掘十大经典算法)\nkNN","(数据挖掘十大经典算法)\nNaive Bayes",
                "(数据挖掘十大经典算法)\nCART: 分类与回归树"
        };
        for (int i = 0; i <10 ; i++) {
            Map<String,Object> map=new HashMap<String, Object>();
            map.put("image",imgId[i]);
            map.put("title",text[i]);
            list.add(map);
        }
        return list;
    }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏牛客网

宜信大数据中心java研发岗面经

在我小时候,我极力装得像个大人,当我已经不再是小孩的时候,我又希望像个孩子。——列夫·托尔斯泰

15620
来自专栏WOLFRAM

2016年Wolfram一行代码大赛获奖部分作品

26680
来自专栏GreenLeaves

COALESCE操作符

一、应用场景 1、购买的零件和本地生产的零件都是零件,尽管多重的实体类型在数据存储上略有不同,但是它们有太多的相同之处,因此通常使用一个表格而不是两个。 所以这...

203100
来自专栏PPV课数据科学社区

趣文 | 程序员们,都进来看看编程语言之父都有谁

1、PHP PHP之父,Rasmus Lerdorf,1994年,为了要维护个人网页而制作的一个简单的用Perl语言编写的程序。这些工具程序用来显示 Rasmu...

36470
来自专栏ml

HDUOJ----2512一卡通大冒险

一卡通大冒险 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Ja...

35790
来自专栏Guangdong Qi

iOS 简单易懂的粒子效果

28430
来自专栏大数据挖掘DT机器学习

使用R语言构造投资组合

原作者: 邓一硕 来自: 格物堂 构造投资组合是金融投资分析中历久弥新的问题。多年以来,学界、业界提出诸多对投资组合进行优化的方法。比如,最经典的基于收益率均...

59460
来自专栏上善若水

015android初级篇之传感器的简单使用

要监控传感器的原始数据,你需要实现 SensorEventListener 接口的 onAccuracyChanged() 和onSensorChanged()...

15350
来自专栏GIS讲堂

Arcgis for Js实现graphiclayer的空间查询

本节讲的是Arcgis for Js的针对graphiclayer的空间查询,内容很简单,代码如下:

30920
来自专栏数据结构与算法

BZOJ3668: [Noi2014]起床困难综合症(贪心 二进制)

21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳。作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争。通过研...

8120

扫码关注云+社区

领取腾讯云代金券