这个貌似很常用,以前会了现在正好用到了,所以就复习一下咯。
附上慕课网的视频地址,这个讲得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;
}