android之适配器
来源:互联网 发布:淘宝后台操作流程视频 编辑:程序博客网 时间:2024/06/05 14:16
在我理解中适配器就是数据跟界面的桥梁。我为什么这么讲。。。
因为接下来写代码中,就是按照几个步骤写就可以了。学完这三个适配器。应该可以熟练掌握了。。哈哈哈。。。。
大致的步骤,就四步。是个人都会写。何况我们还是程序员。哈哈。。
1, 实例化ListView
2, 获取数据
3, 实例化适配器
4, 调用listView中的setAdapter(ListAdapter adapter)方法
我们先开始学习最简单的,ArrayAdapter 适配器
activity_main.xml代码如下
<?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"> <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent"></ListView></RelativeLayout>
是不是很简单,只是一个ListView 控件。哈哈。接下来继续写我们的代码。
MainActivit.java代码如下
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 List<String>list=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布局文件
activity_main.xml代码如下。代码跟上面一样,就一个Listview控件。就不放出来了。
item_listview.xml代码如下:
<?xml version="1.0" encoding="utf-8"?><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 因为是图片跟文本,就可以这样写
PersonBean.java代码如下:
/** * 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; }}
接下来就写我们最主要的代码
MainAcitivity.java代码如下:
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<Map<String,Object>>list=new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initWidgets();//初始化控件 initDatas();//获取数据 /* 五个参数的含义: 1,上下文,2,数据源,3,布局文件 4,设置数据时map的键,5,item的各控件的id 这是第三步 */ SimpleAdapter adapter=new SimpleAdapter( MainActivity.this, list, R.layout.item_listview, new String[]{"imgId","name" }, new int[]{R.id.img,R.id.name} ); //这是第四步 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); Map<String,Object>map=new HashMap<>(); map.put("imgId",bean.getIdImg()); map.put("name",bean.getName()); list.add(map); } }}
是不是很简单,哈哈。。。就四步。
上面两个适配器我们平常用的还不是很多,接下来就让我们学习什么叫万能适配器。BaseAdapter适配器。。。哈哈哈。
我们就在第二个基础上改。换成我们自己的Adapter
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<PersonBean> list; private Context context; public MyAdapter(List<PersonBean> 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模式.
MainAcitivity.java代码如下:
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<PersonBean>list=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几个方法的意思,理解了,就不会太难,其实还是很简单。。哈哈哈哈。。运行效果还是跟第二个一样,就不放出来了。。
总结:
三个适配器我们也学完了,有木有掌握呢,不掌握至少会写吧,哈哈。其实这些代码我写了有十几次遍了。写多了就会写了。我是自学安卓的,加油…..
源码下载
https://github.com/songshuilin/AndroidForBlog/tree/master/adapersimple
- Android适配器之-----SimpleExpandableListAdapter
- Android适配器之-----SimpleAdapter
- Android适配器之---SimpleCursorAdapter
- Android适配器之-----SimpleCursorTreeAdapter
- Android之适配器模式
- Android适配器之BaseAdapter
- Android适配器之SimpleAdapter
- Android适配器之ArrayAdapter
- Android适配器之CursorAdapter
- Android适配器之PagerAdapter
- Android适配器之FragmentPagerAdapter
- Android之Adapter(适配器)
- Android开发之适配器
- android之适配器
- Android之自定义适配器
- Android适配器之 ArrayAdapter
- Android适配器之SimpleAdapter
- Android适配器之BaseAdapter
- iOS开发-文件管理
- UE4下实现HTC Vive手柄拾取物品蓝图编程
- 微服务架构的学习
- Leetcode 62. Unique Paths
- 软件工程——机房收费各种图
- android之适配器
- 数据结构-链栈(C语言)
- Jenkins控制台输出乱码的问题
- NOIP2011 day2 T3 观光公交
- scala-problem41-50
- rtp打包发送H264文件
- mysql一列值排序后的序列号更新到另一列内
- IceDemos : IceGrid
- JDBC进行批处理的四种方式