前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android自定义样式listview

Android自定义样式listview

作者头像
用户1148523
发布2018-01-09 10:40:52
2K0
发布2018-01-09 10:40:52
举报
文章被收录于专栏:FishFish

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

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

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

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

代码语言:javascript
复制
<?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

代码语言:javascript
复制
<?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),这里的适配器的功能就是把内容和样式配一脸。

代码语言:javascript
复制
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里鼓捣鼓捣

代码语言:javascript
复制
listView= (ListView) findViewById(R.id.data_list);
        List<Map<String,Object>> list=getData();
        listView.setAdapter(new MyAdapter(this,list));

这是getData()方法

代码语言:javascript
复制
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;
    }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年12月11日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档