Android自定义样式listview

本文介绍如何为Android ListView自定义样式,包括创建Item布局文件、编写适配器代码及设置ListView等步骤。通过实例展示了如何结合图片和文本实现丰富多彩的ListView Item。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

附上慕课网的视频地址,这个讲得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;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值