1.自定义BaseAdapter适配ListView

1创建布局文件

<?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"><ImageViewandroid:id="@+id/listImg"android:src="@drawable/navigate02"android:layout_width="60dp"android:layout_height="60dp"/><TextViewandroid:id="@+id/listTxt"android:layout_width="wrap_content"android:layout_height="wrap_content"/>
</LinearLayout>

2、创建数据类

创建Person类

public class Person {private String name;private int img;public Person(String name, int img) {this.name = name;this.img = img;}public Person() {}public Person(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getImg() {return img;}public void setImg(int img) {this.img = img;}
}

3、创建PersonAdapter类

public class PersonAdapter extends BaseAdapter {private List<Person> personData=new ArrayList<Person>();public PersonAdapter(List<Person> personData, Context context) {this.personData = personData;this.context = context;}private Context context;@Overridepublic int getCount() {return personData.size();}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return position;}//优化ListView//定义一个ViewHolder静态类static  class ViewHolder{//定义属性,定义列表项数据private ImageView myimg;private TextView myname;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {//绑定数据ViewHolder holder;//判断convertView是否为空if (convertView==null){//新建holder=new ViewHolder();convertView= LayoutInflater.from(context).inflate(R.layout.layout_listview,parent,false);holder.myimg=(ImageView) convertView.findViewById(R.id.listImg);holder.myname=(TextView)convertView.findViewById(R.id.listTxt);}else {holder=(ViewHolder) convertView.getTag();}//设定列表项数据holder.myimg.setImageResource(personData.get(position).getImg());holder.myname.setText(personData.get(position).getName());return convertView;}
}

4、Activity主文件

public class MainActivity extends AppCompatActivity  implements AdapterView.OnItemClickListener , AbsListView.OnScrollListener {private ListView listview;private String[] names=new String[]{"中国慕课大学","华北电力大学","中国人民大学","北京大学","清华大学","中央财经大学","中国政法大学","北京理工大学","北京航空航天大学","北京外国语大学","中国传媒大学","中国民族大学","中国矿业大学","中国地质大学","中国科技大学"};private int [] images=new int[]{R.drawable.navigate01,R.drawable.navigate02,R.drawable.navigate03,R.drawable.navigate04,         R.drawable.navigate05,R.drawable.navigate06,R.drawable.navigate07,R.drawable.navigate08,R.drawable.navigate09,R.drawable.navigate10,R.drawable.navigate11,R.drawable.navigate12,R.drawable.navigate13,R.drawable.navigate14,R.drawable.navigate15,R.drawable.navigate16,R.drawable.navigate17,R.drawable.navigate18};private PersonAdapter adapter;//定义一个列表作为数据源private List<Person> listData=new ArrayList<Person>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);listview=findViewById(R.id.listview);//初始化数据initData();adapter=new PersonAdapter(listData,MainActivity.this);//将适配器添加到listView上listview.setAdapter(adapter);}private void initData(){for (int i=0; i<names.length; i++){//新建person对象Person person=new Person(names[i],images[i]);//将对象加入到list列表中listData.add(person);}}@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {//获取点击的条目的对象Person person=listData.get(position);//弹出每个条目的名称Toast.makeText(MainActivity.this,person.getName(),Toast.LENGTH_SHORT).show();}@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {//判断当前滚动状态if (scrollState==SCROLL_STATE_FLING){Toast.makeText(MainActivity.this,"滑动了一下",Toast.LENGTH_SHORT).show();}else if (scrollState==SCROLL_STATE_IDLE){Toast.makeText(MainActivity.this,"停止了滑动",Toast.LENGTH_SHORT).show();}else  if (scrollState==SCROLL_STATE_TOUCH_SCROLL){Person person=new Person("xinxin",R.drawable.ic_launcher_background);listData.add(person);//通知UI线程刷新界面listViewadapter.notifyDataSetChanged();}Log.d("mydug", "onItemClick: -----");}}
2.自定义BaseAdapter适配RecyclerView

1创建数据模型Person类

public class Person {private String name;private int img;public Person(String name, int img) {this.name = name;this.img = img;}public Person() {}public Person(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getImg() {return img;}public void setImg(int img) {this.img = img;}
}

2创建自定义Adapter

public class MyRecycleAdapter extends RecyclerView.Adapter<MyRecycleAdapter.MyViewHolder> {private List<Person> personData=new ArrayList<Person>();private Context context;//为接口设置set方法public void setOnItemClickListener(OnItemClickListener onItemClickListener) {this.mOnItemClickListener = onItemClickListener;}//定义监听private  OnItemClickListener mOnItemClickListener;public MyRecycleAdapter(List<Person> personData, Context context) {this.personData = personData;this.context = context;}@NonNull@Overridepublic MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {//填充布局获取列表项布局文件View itemview= LayoutInflater.from(context).inflate(R.layout.bookitem,parent,false);MyViewHolder myViewHolder=new MyViewHolder(itemview);return myViewHolder;}//填充onCreateViewHolder方法返回的holder中的控件@Overridepublic void onBindViewHolder(@NonNull final MyViewHolder holder, final int position) {//获取通讯录数据Person person=personData.get(position);holder.myimg.setImageResource(person.getImg());holder.myname.setText(person.getName());//设置点击事件if (mOnItemClickListener!=null){holder.itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mOnItemClickListener.OnItemClickListener(holder.itemView,position);}});}}@Overridepublic int getItemCount() {return personData.size();}//定义一个内部类class MyViewHolder extends RecyclerView.ViewHolder{private ImageView myimg;private TextView myname;public MyViewHolder(@NonNull View itemView) {super(itemView);//获取对应的列表项myimg=itemView.findViewById(R.id.item_img);myname=itemView.findViewById(R.id.item_name);}}
}

3、创建自定义接口

public interface OnItemClickListener {//点击监听public void OnItemClickListener(View view,int position);
}

4创建RecyclerView的布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><ImageViewandroid:id="@+id/item_img"android:layout_width="26dp"android:layout_height="90dp"android:layout_weight="1"android:src="@mipmap/ic_launcher"/><TextViewandroid:id="@+id/item_name"android:layout_weight="1"android:text="TextView"android:textSize="24sp"android:layout_width="wrap_content"android:layout_height="wrap_content"/></LinearLayout>

5、主布局文件

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/myrecyclView"android:layout_width="match_parent"android:layout_height="match_parent"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" />
</androidx.con

6Activity文件

public class MainActivity extends AppCompatActivity {private RecyclerView myrecyclerView;private MyRecycleAdapter adpter;private String[] names=new String[]{"中国慕课大学","华北电力大学","中国人民大学","北京大学","清华大学","中央财经大学","中国政法大学","北京理工大学","北京航空航天大学","北京外国语大学","中国传媒大学","中国民族大学","中国矿业大学","中国地质大学","中国科技大学"};private int [] images=new int[]{R.drawable.navigate01,R.drawable.navigate02,R.drawable.navigate03,R.drawable.navigate04,R.drawable.navigate05,R.drawable.navigate06,R.drawable.navigate07,R.drawable.navigate08,R.drawable.navigate09,R.drawable.navigate10,R.drawable.navigate11,R.drawable.navigate12,R.drawable.navigate13,R.drawable.navigate14,R.drawable.navigate15,R.drawable.navigate16,R.drawable.navigate17,R.drawable.navigate18};//定义一个列表作为数据源private List<Person> listData=new ArrayList<Person>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initData();//1初始化控件myrecyclerView=findViewById(R.id.myrecyclView);//2设置RecyclerView布局管理器myrecyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this,LinearLayoutManager.HORIZONTAL,false));//3初始化数据适配器adpter=new MyRecycleAdapter(listData,MainActivity.this);//4设置动画myrecyclerView.setItemAnimator(new DefaultItemAnimator());//5设置适配器myrecyclerView.setAdapter(adpter);//6设置监听器adpter.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void OnItemClickListener(View view, int position) {Person person=listData.get(position);Toast.makeText(MainActivity.this,person.getName(),Toast.LENGTH_SHORT).show();}});}private void initData(){for (int i=0; i<names.length; i++){//新建person对象Person person=new Person(names[i],images[i]);//将对象加入到list列表中listData.add(person);}}
}

慕课大学基于Android P 的移动应用开发之第6章ListView相关推荐

  1. android 判断byte值_Android开发之UDP可靠性传输

    轩羽:Android开发之UDP​zhuanlan.zhihu.com 在这一篇文章里,小编说到UDP是不可靠的,故,我们要自己写一套协议,来使UDP实现可靠性传输,这里,小编和小编的小伙伴一起,写了 ...

  2. Android工程师转型Java后端开发之路,自己选的路,跪着也要走下去!

    本文是公众号读者jianfeng投稿的面试经验 恭喜该同学成功转型 目录: 毅然转型,没头苍蝇 制定目标,系统学习 面试经历 毅然转岗,没头苍蝇 首先,介绍一下我的背景.本人坐标广州,2016年毕业于 ...

  3. 进入大学的大一新生怎么走上开发之路,学好技术

    在发布这博文之前,本人是个大三下学期的大三狗一枚.技术称不上高手,也不是什么牛逼的人物.实战开发不是很多,最近 在找实习准备就业.就在大三快就业才有感而发,对于刚入学的大一新生提几句建议和经验之谈.如 ...

  4. android蓝牙4.0(BLE)开发之ibeacon初步

    一个april beacon里携带的信息如下 ? 1 <code class=" hljs ">0201061AFF4C0002159069BDB88C11416BAC ...

  5. android ndk 多线程mk,NDK开发之Android.mk文件编写

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 现在我们把android稍微写复杂些.在项目根目录下创建一个lib1文件夹 结构如图: test10.h和test11. ...

  6. Android studio中的NDK开发之NDK环境变量的配置(图文教程)

    为什么总是图文教程? 因为本人对抽象事物联想不到位,更喜欢具体能看到的东西,简单明了,一目了然,更是一步到位!如下图: 第一步找到你通过android studio下载好的NDK目录,如果不知道下载到 ...

  7. 方案设计:IPC产品系统设计 - 基于芯片商提供的SDK API开发之二

    方案:安霸.海思(君正.Mstar.安凯) 1.每个模块都是开N(1,2,3...)个pthread线程,线程之间通过生产者,消费者模型(或者进程间通信机制)实现数据同步/异步.通过数据队列缓冲模块数 ...

  8. android人事管理系统,基于Android系统的人事管理系统设计与实现.doc

    基于Android系统的人事管理系统设计与实现 目录 第一章 绪论4 1.1 项目的来源及背景4 1.2 项目的功能4 第二章 概要设计5 2.1开发工具5 2.2 Eclipse的开发环境5 2.3 ...

  9. 基于Android的二维码识别系统的研究与实现(eclipse开发)

    目 录 1 Android系统开发背景与意义 1 1.1 Android系统平台的出现 1 1.2 Android系统的发展 1 1.3 Android系统架构的介绍 1 1.4 Android开放系 ...

最新文章

  1. C语言实现大数运算(长整数的加、减、乘、除)
  2. UVa1112 - Mice and Maze(Dijkstra和Floyd_warshall)
  3. mysql命令巧记_MYSQL常用命令大全(三)【值得收藏】
  4. 云炬随笔20211001
  5. python字符串截取方法_如何使用python语言中的字符串方法截取字符串
  6. [蓝桥杯][2019年第十届真题c/c++B组]后缀表达式(解释sum -= 2*a[i])
  7. DOM之事件高级(附实例、图解)
  8. 如何一周过计算机二级java篇
  9. 屏幕共享软件都有什么功能呢?
  10. 二级C语言考试环境注意事项
  11. GOP I帧和IDR帧
  12. 秋水仙碱与牛血清白蛋白 (BSA)偶联物(相关实验)
  13. 图的邻接矩阵存储(简单代码实现)
  14. c语言指数爆炸月球,指数爆炸带来的震撼
  15. 牛客网-《刷C语言百题》第二期
  16. linux设备驱动之pci设备的I/O和内存
  17. linux gcc strip命令简介
  18. IDEA创建JavaWeb项目配置
  19. HTML5规定的行为,不遵循Html5规则的行为都是耍流氓
  20. SLM6500充电板的电磁干扰EMI措施

热门文章

  1. Midjourney,科技融入设计的新时代?
  2. 项目马上就告一段落了
  3. 校园卡管理系统设计c语言,校园一卡通系统的设计与实现.pdf
  4. 《谈学单片机有前途还是嵌入式系统有前途》一文吴坚鸿回复整理
  5. 计算机专业没学好找工作,为什么现在计算机专业的应届毕业生不好找工作了? - 收获啦...
  6. Java 面向对象编程 考试监考安排系统
  7. 新期刊《Journal of Machine Learning》上线!
  8. PPT(15)案例分析—职业生涯规划PPT
  9. Unity3D -- Hit UFO
  10. STM32使用温湿度传感器