一、实现的步骤

1.封装数据

image.png

2.创建数据对应的实例,放入list

image.png

3.用for循环打印封装的数据

image.png

4.绑定listview控件

image.png

5.创建适配器,继承BaseAdapter,将数据放入适配器

image.png
image.png

6.创建构造方法,将该数据和上下文放入MyAdapter内

image.png

7.在单元格布局方法内,将布局放入

image.png

8.设置点击方法,点点击某个条目之后,显示对应的消息提醒

image.png

二、总体实现代码

  1. 1.布局activity_main.xml文件
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. >
  6. <ListView
  7. android:id="@+id/lv_item"
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content"
  10. />
  11. </LinearLayout>
  1. 2.布局list_item.xml文件
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="110dp"
  5. android:orientation="vertical"
  6. >
  7. <TextView
  8. android:id="@+id/tv_text"
  9. android:layout_width="wrap_content"
  10. android:layout_height="wrap_content"
  11. android:text=""
  12. android:lines="2"
  13. android:ellipsize="end"
  14. android:textSize="25dp"
  15. android:padding="8dp"
  16. android:textColor="#A81C122C"
  17. />
  18. <LinearLayout
  19. android:layout_width="match_parent"
  20. android:layout_height="wrap_content"
  21. android:orientation="horizontal"
  22. android:gravity="end"
  23. >
  24. <TextView
  25. android:id="@+id/tv_date"
  26. android:layout_width="wrap_content"
  27. android:layout_height="wrap_content"
  28. android:text=""
  29. android:textSize="18dp"
  30. android:layout_marginRight="15dp"
  31. android:textColor="#E62A50"
  32. />
  33. <TextView
  34. android:id="@+id/tv_time"
  35. android:layout_width="wrap_content"
  36. android:layout_height="wrap_content"
  37. android:text="16:55"
  38. android:textSize="18dp"
  39. android:layout_marginRight="8dp"
  40. android:textColor="#E62A50"
  41. />
  42. </LinearLayout>
  43. </LinearLayout>
  1. 3.StudyDataBean文件代码
  1. package com.example.mylistview.bean;
  2. public class StudyDataBean {
  3. //1.定义数据,从网上获取该数据(封装)
  4. private String name;
  5. public String getName() {
  6. return name;
  7. }
  8. public void setName(String name) {
  9. this.name = name;
  10. }
  11. }
  1. 4.MainActivity文件代码
  1. package com.example.mylistview;
  2. import androidx.appcompat.app.AppCompatActivity;
  3. import android.os.Bundle;
  4. import android.view.View;
  5. import android.widget.AdapterView;
  6. import android.widget.ListView;
  7. import android.widget.Toast;
  8. import com.example.mylistview.adapter.MyAdapter;
  9. import com.example.mylistview.bean.StudyDataBean;
  10. import java.util.ArrayList;
  11. import java.util.List;
  12. public class MainActivity extends AppCompatActivity {
  13. //2.创建数据实例
  14. private List<StudyDataBean> list=new ArrayList<>();
  15. @Override
  16. protected void onCreate(Bundle savedInstanceState) {
  17. super.onCreate(savedInstanceState);
  18. setContentView(R.layout.activity_main);
  19. //5.绑定该ListView的控件
  20. ListView lv_item = findViewById(R.id.lv_item);
  21. //3.利用for循环打印该数据
  22. for (int i=0;i<50;i++){
  23. //4.创建该封装的实例,将该数据放进list
  24. StudyDataBean studyDataBean=new StudyDataBean();
  25. studyDataBean.setName("学习" + i);
  26. list.add(studyDataBean);
  27. }
  28. //7.将数据放进适配器
  29. lv_item.setAdapter(new MyAdapter(list,this));
  30. //15.设置点击方法,当点击到某个item,即弹出消息提醒
  31. lv_item.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  32. @Override
  33. public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
  34. Toast.makeText(MainActivity.this, "点击了学习" +position, Toast.LENGTH_SHORT).show();
  35. }
  36. });
  37. }
  38. }
  1. 5.MyAdapter文件代码
  1. package com.example.mylistview.adapter;
  2. import android.content.Context;
  3. import android.util.Log;
  4. import android.view.LayoutInflater;
  5. import android.view.View;
  6. import android.view.ViewGroup;
  7. import android.widget.BaseAdapter;
  8. import android.widget.TextView;
  9. import com.example.mylistview.R;
  10. import com.example.mylistview.bean.StudyDataBean;
  11. import java.util.List;
  12. //6.创建辅助类,通过继承,实现每个方法
  13. public class MyAdapter extends BaseAdapter {
  14. //8.创建构造方法,将数据源和上下文放入MyAdapter内
  15. private List<StudyDataBean> list;
  16. private Context context;
  17. public MyAdapter(List<StudyDataBean> list, Context context) {
  18. this.list = list;
  19. this.context = context;
  20. }
  21. //9.打印条数,是数据的长度
  22. @Override
  23. public int getCount() {
  24. return list.size();
  25. }
  26. @Override
  27. public Object getItem(int position) {
  28. return null;
  29. }
  30. //10.id就是对应数据的位置
  31. @Override
  32. public long getItemId(int position) {
  33. return position;
  34. }
  35. //11.返回每一个条目
  36. @Override
  37. public View getView(int position, View convertView, ViewGroup parent) {
  38. /*
  39. 12.将布局渲染给convertView,因为convertView会复用,为了防止不断创建,
  40. 所以进行一个判断,通过判断,若该单元格布局为空,则显示该布局,
  41. */
  42. if (convertView==null) {
  43. convertView = LayoutInflater.from(context).inflate(R.layout.list_item, parent, false);
  44. }
  45. //13.通过控件绑定拿到单元格布局内的控件
  46. TextView tv_item = convertView.findViewById(R.id.tv_item);
  47. //14.获取该item的值
  48. tv_item.setText(list.get(position).getName());
  49. Log.e("he","getView:"+position);
  50. return convertView;
  51. }
  52. }
  1. 6.效果图<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/1574587/1622281511907-2641bfbd-4007-4fc2-ab3d-8fffcaa02643.png#clientId=u7c22ae1d-9747-4&from=paste&height=565&id=ufea9d23a&margin=%5Bobject%20Object%5D&name=image.png&originHeight=565&originWidth=860&originalType=binary&size=111192&status=done&style=none&taskId=u287b0981-de49-4743-8e93-cf582e6cbcc&width=860)