我们先开始学习最简单的,ArrayAdapter 适配器
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent">ListView>
RelativeLayout>
是不是很简单,只是一个ListView 控件。哈哈。接下来继续写我们的代码。
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private ListView mLv;
private Listlist=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initWidgets();//初始化控件
initDatas();//初始化数据
//三个参数的意思:1,上下文 2,布局文件 ,3,数据源
//第三步,获取adapter
ArrayAdapter mAdapter=new ArrayAdapter(
MainActivity.this,
android.R.layout.simple_list_item_1,
list
);
//这是第四步 setAdapter()
mLv.setAdapter(mAdapter);
}
//初始化控件
private void initWidgets() {
//这是第一步 。初始化ListView
mLv= (ListView) findViewById(R.id.listView);
}
//初始化数据
private void initDatas(){
//这是第二部。获取数据
for (int i = 0; i <15 ; i++) {
list.add("我不是程序员"+i);
}
}
}
看到没,大致是不是四步就搞定,哈哈哈,简单吧,,接下来我们就运行看看效果。。
学完ArrayAdapter我们只能只是展示文本数据而已,接下来我们就学下有点难度的,可以展示图片。SimpleAdapter适配器,其实也没什么难度,就四步而已。。哈哈哈 接下来就开始吧。
先把几个简单的布局写出来,一个item_listview.xml布局文件,一个activity_main.xml布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
>
<ImageView
android:src="@mipmap/ic_launcher"
android:id="@+id/img"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/name"
android:textSize="20sp"
android:layout_marginLeft="15dp"
android:layout_marginTop="15dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我不是程序员"/>
LinearLayout>
就一个ImageView,和一个TextView也很简单。。然后我根据item里的内容 定义一个javabean 因为是图片跟文本,就可以这样写
/**
* Created by Administrator on 2016/9/18.
*/
public class PersonBean {
private int idImg;
private String name;
public int getIdImg() {
return idImg;
}
public void setIdImg(int idImg) {
this.idImg = idImg;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
接下来就写我们最主要的代码
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MainActivity extends AppCompatActivity {
private ListView mLv;
private List
是不是很简单,哈哈。。。就四步。
上面两个适配器我们平常用的还不是很多,接下来就让我们学习什么叫万能适配器。BaseAdapter适配器。。。哈哈哈。
MyAdapter.Java
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;
/**
* Created by Administrator on 2016/9/18.
*/
public class MyAdapter extends BaseAdapter {
private List list;
private Context context;
public MyAdapter(List list, Context context) {
this.list = list;
this.context = context;
}
//item的大小,也就是数据源的大小
@Override
public int getCount() {
return list.size();
}
//PersonBean对象
@Override
public Object getItem(int position) {
return list.get(position);
}
//item位置
@Override
public long getItemId(int position) {
return position;
}
//返回view对象
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
ViewHoder holder = null;
if (convertView != null) {
view = convertView;
holder = (ViewHoder) view.getTag();
} else {
//就是把布局文件加载成一个view
view = LayoutInflater.from(context).inflate(R.layout.item_listview, null);
holder = new ViewHoder();
view.setTag(holder);
holder.mImg = (ImageView) view.findViewById(R.id.img);
holder.mTv = (TextView) view.findViewById(R.id.name);
}
holder.mImg.setImageResource(list.get(position).getIdImg());
holder.mTv.setText(list.get(position).getName());
return view;
}
}
class ViewHoder {
ImageView mImg;
TextView mTv;
}
这里我用了ViewHoder模式,只是缓存了mImag和mTv,省的总是执行findviewbyid方法。这样执行效率会高点。以后我们学习recycleView也是用到ViewHoder模式.
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MainActivity extends AppCompatActivity {
private ListView mLv;
private Listlist=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initWidgets();//初始化控件
initDatas();//获取数据
/*
两个参数的含义:
1,数据源 2,上下文
这是第三步
*/
MyAdapter adapter=new MyAdapter(list,MainActivity.this);
//这是第四步
mLv.setAdapter(adapter);
}
//初始化控件
private void initWidgets() {
//这是第一步 。初始化ListView
mLv= (ListView) findViewById(R.id.listView);
}
//初始化数据
private void initDatas(){
//这是第二部。获取数据
for (int i = 0; i <15 ; i++) {
PersonBean bean=new PersonBean();
bean.setIdImg(R.mipmap.ic_launcher);
bean.setName("我真不是程序员"+i);
list.add(bean);
}
}
}
是不是很简单,也是四步解决。哈哈。其实最主要还是理解重写BaseAdapter几个方法的意思,理解了,就不会太难,其实还是很简单。。哈哈哈哈。。运行效果还是跟第二个一样,就不放出来了。。