ListView:自定义Adapter小案例(实现ArrayAdapter功能)
2016-01-08 16:06
423 查看
1. 一、模拟ArrayAdapter适配器前,我们先回顾一下ArrayAdapter:
第一个参数:上下文(访问系统资源)
第二个参数:item布局文件id 【布局文件可以自定义(案例中自定义为Item),系统自带的为android.R.layout.simple_list_item_1】
第三个参数:数据源
2. 二、ListView使用步骤:
1)XML中添加ListView的控件
2)创建Item布局,创建并初始化数据源
3)创建并初始化Adapter
4)直接使用setAdapter(adapter)
3.三、代码部分:
activity_main.xml中的代码:
item.xml代码:listView中每个item中是一个TextView。
自定义MyAdapter继承BaseAdapter,模拟ArrayAdapter功能
MainActivity中代码:
P.S.
四.如何实现点击Item时,Item变成蓝色:
看见点击事件 条件反射一样 想到给Item绑定监听器。
1.思路:
①先在MyAdapter中定义点击的item位置下标为全局变量,根据下标改变该位置的颜色
②点击下标在MainActivity中adapter对象所绑定的监听器中获取。
具体代码实现如下:
2.MainActivity中代码:
MyAdapter中代码修改:
ArrayAdapter(Context上下文,resourceId Item的布局文件id,数据源String[]/List<String>) ListView.setAdapter(adapter);
第一个参数:上下文(访问系统资源)
第二个参数:item布局文件id 【布局文件可以自定义(案例中自定义为Item),系统自带的为android.R.layout.simple_list_item_1】
第三个参数:数据源
2. 二、ListView使用步骤:
1)XML中添加ListView的控件
2)创建Item布局,创建并初始化数据源
3)创建并初始化Adapter
4)直接使用setAdapter(adapter)
3.三、代码部分:
activity_main.xml中的代码:
<LinearLayout 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:orientation="vertical" > <ListView android:id="@+id/listView_Main" android:layout_width="match_parent" android:layout_height="match_parent" /> <TextView android:id="@+id/emptyView" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:text="暂无数据" android:textColor="#00ff00" /> </LinearLayout>
item.xml代码:listView中每个item中是一个TextView。
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/item" android:layout_width="match_parent" android:layout_height="match_parent" > </TextView>
自定义MyAdapter继承BaseAdapter,模拟ArrayAdapter功能
package org.moblie.train.zday09_myadapter; import android.app.Activity; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; public class MyAdapter extends BaseAdapter { private Activity activity; private int resourceId; private String[] totalList; public MyAdapter(Activity activity, int resourceId, String[] totalList) { // TODO Auto-generated constructor stub this.activity = activity; this.resourceId = resourceId; this.totalList = totalList; } public int getCount() { // 数组元素个数 return totalList.length; } public Object getItem(int position) { return totalList[position]; } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { // 获取listView对象 View view = activity.getLayoutInflater().inflate(resourceId, parent, false); TextView item = (TextView) view.findViewById(R.id.item); //给每个Item赋值 item.setText(totalList[position]); return view; } }
MainActivity中代码:
package org.moblie.train.zday09_myadapter; import android.app.Activity; import android.os.Bundle; import android.widget.ListView; import android.widget.TextView; public class MainActivity extends Activity { // 声明布局控件 private ListView listView_Main; private TextView emptyView; // 声明数据源 private String[] totalList; private MyAdapter adapter; private int resourceId = R.layout.item; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化加载数据 initData(); // 初始化布局控件 initViews(); } private void initViews() { listView_Main = (ListView) findViewById(R.id.listView_Main); emptyView = (TextView) findViewById(R.id.emptyView); // 自动匹配当没有数据的时候,显示无数据 listView_Main.setEmptyView(emptyView); // 创建并初始化自定义适配器,第二个参数即自定义的item的id。 MyAdapter adapter = new MyAdapter(this, resourceId, totalList); // 给listView设置适配器 listView_Main.setAdapter(adapter); } private void initData() { totalList = new String[10]; for (int i = 0; i < totalList.length; i++) { totalList[i] = "联系人" + (i + 1); } } }
P.S.
四.如何实现点击Item时,Item变成蓝色:
看见点击事件 条件反射一样 想到给Item绑定监听器。
1.思路:
①先在MyAdapter中定义点击的item位置下标为全局变量,根据下标改变该位置的颜色
②点击下标在MainActivity中adapter对象所绑定的监听器中获取。
具体代码实现如下:
2.MainActivity中代码:
private void initViews() { listView_Main = (ListView) findViewById(R.id.listView_Main); emptyView = (TextView) findViewById(R.id.emptyView); // 自动匹配当没有数据的时候,显示无数据 listView_Main.setEmptyView(emptyView); // 创建并初始化自定义适配器,第二个参数即自定义的item的id。 adapter = new MyAdapter(this, resourceId, totalList); // 给listView设置适配器 listView_Main.setAdapter(adapter); // 给listView绑定监听器,匿名内部类 listView_Main.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // 给点击位置赋值,判断是否要改变颜色。 adapter.setIndex(position); // 刷新UI界面 adapter.notifyDataSetChanged(); } }); }
MyAdapter中代码修改:
// 数组下标从0开始,所以定义index应该初始值为-1, //如果直接默认0的话,即便不点击第一个item,第一个直接就显示蓝色。不符合要求。 private int index = -1; public int getIndex() { return index; } public void setIndex(int index) { this.index = index; }
public View getView(int position, View convertView, ViewGroup parent) { // 获取listView对象 View view = activity.getLayoutInflater().inflate(resourceId, parent, false); TextView item = (TextView) view.findViewById(R.id.item); if (index == position) { item.setTextColor(Color.BLUE); } item.setText(totalList[position]); return view; }
相关文章推荐
- uva 11572 - Unique Snowflakes
- SQLServer2008:助您轻松编写T-SQL存储过程(原创)【转】
- ora-06401和ora-12154
- win7 SDK更新,不能连接到谷歌更新网络
- Android系统权限配置详解
- linux 定时任务
- 【SSH进阶之路】Hibernate基本映射(三)
- Fragment初学7——Fragment在Android开发中的应用1
- wpf图片查看器,支持鼠标滚动缩放拖拽
- Little Alchemy 游戏 - 扒答案。。 Java
- apache服务器全局配置详解
- 01-08 kvc model
- Retrofit 和 RxJava 结合使用
- 有20个数组,每个数组有500个元素,升序排列,现在在这20*500个数中找出排名前500的数。
- UIScrollView页面
- 使用BeanNameAutoProxyCreator实现方法日志代理
- rebmuNemordnilaP.9
- linux下tar.gz、tar、bz2、zip等解压缩命令
- 杭电OJ 5601N*M bulbs (论思维定式的口怕)
- 活动轮廓模型学习(几何、参数)