AdapterView:用于显示多条数据采用MVC模式
ArrayAdapter中只能放置同一种类型的元素
1、先在layout中创建ListView 控件
2、在Activity中获得ListView 并创建ArrayAdapter<>适配器,放入String类型的值。
1、Layout:
<RelativeLayout 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" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context="com.kongjian.administrator.mykongjian.MyListview ">
<ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="match_parent">
</ListView>
</RelativeLayout>
2、Activity:
package com.kongjian.administrator.mykongjian;
import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MyListview extends Activity {
private ListView mlistview;
private String[] array={"张三","李四","王五","赵六"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_listview);
mlistview= (ListView) findViewById(R.id.listview);
ArrayAdapter<String> adapter=new ArrayAdapter<String>
(this,android.R.layout.simple_list_item_1,array);
mlistview.setAdapter(adapter);
}
}
补充:
自己建的xml:
ctrl+点击simple_list_item_1,进入到simple_list_item_1.xml中复制
TextView 中的代码。在layout下新建xml文件,复制后进行修改。
下面代码在原有基础上增加了一条语句:
android:textColor="#ff0000"
代码:
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?
android:attr/textAppearanceListItemSmall"
android:gravity="center_vertical"
android:textColor="#ff0000"
android:minHeight="?
android:attr/listPreferredItemHeightSmall" />SimpleAdapter
在调用时还需要修改Activity中的代码
ArrayAdapter<String> adapter=new ArrayAdapter<String>
(this,R.layout.mylistviewtext,array);
使用方法:
1、进行布局
2、获得ListView,创建SimpleAdapter,根据SimpleAdapter中要传递的数据创建List<HashMap<String,String>>
对数据进行初始化即写initData()
方法。
1、布局
名字 年龄 爱好
性别
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center_vertical" android:layout_margin="15dp">
<TextView android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="名字"/>
<LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical">
<TextView android:id="@+id/age" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="年龄"/>
<TextView android:id="@+id/sex" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="性别"/>
</LinearLayout>
<TextView android:id="@+id/hobby" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="爱好" />
</LinearLayout>
调用:
package com.kongjian.administrator.mykongjian;
import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class MyListview extends Activity {
private ListView mlistview;
private List<HashMap<String,String>> mdata;
// private String[] array={"张三","李四","王五","赵六"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_listview);
mlistview= (ListView) findViewById(R.id.listview);
initData();
SimpleAdapter adapter=new SimpleAdapter
(this,mdata,R.layout.item_simpleadapter,new String[]
{"name","age","sex","hobby"},new int[]
{R.id.name,R.id.age,R.id.sex,R.id.hobby});
mlistview.setAdapter(adapter);
}
private void initData() {
mdata=new ArrayList<>();
HashMap<String,String> zhangsan= createHashmap("张 三","20","男","爱好打篮球");
HashMap<String,String> lisi= createHashmap("张 三","20","男","爱好打篮球");
HashMap<String,String> wangwu= createHashmap("王 五","20","男","爱好打篮球");
HashMap<String,String> zhaoliu= createHashmap("赵 六","20","男","爱好打篮球");
mdata.add(zhangsan);
mdata.add(wangwu);
mdata.add(lisi);
mdata.add(zhaoliu);
}
private HashMap<String, String> createHashmap(String
name,String age,String sex,String hobby) {
HashMap<String,String> zhangsan=new HashMap<>();
zhangsan.put("name",name);
zhangsan.put("age",age);
zhangsan.put("sex",sex);
zhangsan.put("hobby",hobby);
return zhangsan;
}
}
MVC全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。
Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。
通常模型对象负责在数据库中存取数据。
View(视图)是应用程序中处理数据显示的部分。
通常视图是依据模型数据创建的。
Controller(控制器)是应用程序中处理用户交互的部分。
通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
1、创建List中自己需要的泛型Student类
package com.item.list;
/** * Created by Administrator on 2015/8/24. */
public class Student {
private String name;
private String age;
private String sex;
private String hobby;
private int img;
//为添加数据方便,重载构造器
public Student(String name,String age,String sex,String hobby, int img){
this.name=name;
this.age=age;
this.sex=sex;
this.hobby=hobby;
this.img=img;
}
public String getHobby() {
return hobby;
}
public int getImg() {
return img;
}
public void setImg(int img) {
this.img = img;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
2、布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center_vertical" android:layout_margin="15dp">
<ImageView android:id="@+id/image_view" android:layout_width="wrap_content" android:layout_height="wrap_content" />
<TextView android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="名字"/>
<LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical">
<TextView android:id="@+id/age" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="年龄"/>
<TextView android:id="@+id/sex" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="性别"/>
</LinearLayout>
<TextView android:id="@+id/hobby" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="爱好" />
</LinearLayout>
3、创建Studentadapter
在getView()方法中通过调用minflater中的inflater()方法(inflater()方法中传递要显示的layout和null)获得view对象,通过view.findViewById()找到相应要得到的ImageView或是TextView,并对其中的图片或文件进行设置
package com.kongjian.administrator.mykongjian.Adapter;
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 com.item.list.Student;
import com.kongjian.administrator.mykongjian.R;
import java.util.List;
/** * Created by Administrator on 2015/8/24. */
public class Studentadapter extends BaseAdapter {
private List<Student> mData;
private LayoutInflater minflater;
//minflater作用只有一点,就是将layout转化成View对象
public Studentadapter(LayoutInflater inflater,List<Student> Data){
minflater=inflater;
mData=Data;
}
@Override
public int getCount() {
return mData.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view=minflater.inflate(R.layout.item_simpleadapter,null);
Student student=mData.get(position);
ImageView img= (ImageView) view.findViewById(R.id.image_view);
TextView textview_name= (TextView) view.findViewById(R.id.name);
TextView textview_age= (TextView) view.findViewById(R.id.age);
TextView textview_sex= (TextView) view.findViewById(R.id.sex);
TextView textview_hobby= (TextView) view.findViewById(R.id.hobby);
img.setImageResource(student.getImg());
textview_name.setText(student.getName());
textview_age.setText(student.getAge());
textview_sex.setText(student.getSex());
textview_hobby.setText(student.getHobby());
return view;
}
}
4、Activity中调用
获得ListView,创建以Student为泛型的List,对数据进行初始化,放入List当中,创建StudentAdapter适配器,再进行调用。
package com.kongjian.administrator.mykongjian;
import android.app.Activity;
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import com.item.list.Student;
import com.kongjian.administrator.mykongjian.Adapter.Studentadapter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class MyListview extends Activity {
private ListView mlistview;
public List<Student> mData;
public LayoutInflater minflater;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_listview);
mlistview= (ListView) findViewById(R.id.listview);
minflater=getLayoutInflater();
initStudent();
Studentadapter adapter=new Studentadapter(minflater,mData);
mlistview.setAdapter(adapter);
}
private void initStudent() {
mData=new ArrayList<Student>();
Student zhaoliying=new Student("赵丽颖","20","女","爱好吃",R.mipmap.zly);
Student zhangziyi=new Student("章子怡","21","女","爱好表演",R.mipmap.zzy);
Student zhaoli=new Student("赵丽颖","20","女","爱好吃",R.mipmap.zly);
Student zhangzyi=new Student("章子怡","21","女","爱好表演",R.mipmap.zzy);
Student zhaoliing=new Student("赵丽颖","20","女","爱好吃",R.mipmap.zly);
Student zhaniyi=new Student("章子怡","21","女","爱好表演",R.mipmap.zzy);
Student zhaoiying=new Student("赵丽颖","20","女","爱好吃",R.mipmap.zly);
Student zhangyi=new Student("章子怡","21","女","爱好表演",R.mipmap.zzy);
mData.add(zhaoliying);
mData.add(zhangziyi);
mData.add(zhaoli);
mData.add(zhangzyi);
mData.add(zhaoliing);
mData.add(zhaniyi);
mData.add(zhaoiying);
mData.add(zhangyi);
}
}
在ListView中只能调用setOnItemClickListener不能调用setOnClickListener方法。
mlistview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Student data=mData.get(position);
Log.d("item",data.getName()+data.getAge()+data.getSex()+data.getHobby());
}
});
}