• Android : ListView + BaseAdapter-2简单应用


     ​​容器与适配器:​​​​​        http://t.csdnimg.cn/ZfAJ7

    实体类 News.java

    1. package com.example.mylistviewadapter2.entity;
    2. public class News {
    3. private String title;
    4. private String content;
    5. private int img;
    6. public News(String title, String content, int img){
    7. this.title = title;
    8. this.content = content;
    9. this.img =img;
    10. }
    11. public String getTitile() {
    12. return title;
    13. }
    14. public void setTitile(String title) {
    15. this.title = title;
    16. }
    17. public String getContent() {
    18. return content;
    19. }
    20. public void setContent(String content) {
    21. this.content = content;
    22. }
    23. public int getImg() {
    24. return img;
    25. }
    26. public void setImg(int img) {
    27. this.img = img;
    28. }
    29. }

    适配器 写个类继承BaseAdapter 

    1. package com.example.mylistviewadapter2;
    2. import android.content.Context;
    3. import android.view.LayoutInflater;
    4. import android.view.View;
    5. import android.view.ViewGroup;
    6. import android.widget.BaseAdapter;
    7. import android.widget.ImageView;
    8. import android.widget.TextView;
    9. import com.example.mylistviewadapter2.entity.News;
    10. import java.util.List;
    11. public class NewsAdpater extends BaseAdapter {
    12. private List date;
    13. private Context context;
    14. //两个标记类
    15. private static final int TYPE_NEWS_1 = 0;
    16. private static final int TYPE_NEWS_2 = 1;
    17. //構造器
    18. public NewsAdpater(List date, Context context){
    19. this.date = date;
    20. this.context = context;
    21. }
    22. //BaseAdapter最基本的几个方法:
    23. // 1. getCount 填充的数据集数
    24. // 2.getItem 数据集中指定索引对应的数据项
    25. // 3. getItemId 指定行所对应的ID
    26. // 4. getView 每个Item所显示的类容
    27. @Override
    28. public int getCount() {
    29. //充的数据集数
    30. return date.size();
    31. }
    32. @Override
    33. public Object getItem(int position) {
    34. //数据集中指定索引对应的数据项
    35. return date.get(position);
    36. }
    37. @Override
    38. public long getItemId(int position) {
    39. // 指定行所对应的ID
    40. return position;
    41. }
    42. //重写 getItemViewType 返回对应的item布局类型
    43. @Override
    44. public int getItemViewType(int position) {
    45. if(position % 2 == 0){
    46. return TYPE_NEWS_1;
    47. }else{
    48. return TYPE_NEWS_2;
    49. }
    50. }
    51. //重写 getViewTypeCount 返回总共有几个item布局类型
    52. @Override
    53. public int getViewTypeCount() {
    54. return 2;
    55. }
    56. //优化
    57. @Override
    58. public View getView(int position, View convertView, ViewGroup parent) {
    59. //获取布局类型
    60. int type = getItemViewType(position);
    61. ViewHoler holer = null;
    62. ViewHoler2 holer2 = null;
    63. if(convertView == null){
    64. switch (type){
    65. case TYPE_NEWS_1:
    66. holer = new ViewHoler();
    67. //每个Item所显示的类容
    68. convertView = LayoutInflater.from(context).inflate(R.layout.left_list_view,parent,false);
    69. holer.imageView = convertView.findViewById(R.id.btnImg);
    70. holer.tvTitle = convertView.findViewById(R.id.tvH);
    71. holer.tbCont = convertView.findViewById(R.id.tvCont);
    72. convertView.setTag(holer);
    73. break;
    74. case TYPE_NEWS_2:
    75. holer2 = new ViewHoler2();
    76. //每个Item所显示的类容
    77. convertView = LayoutInflater.from(context).inflate(R.layout.right_list_view,parent,false);
    78. holer2.imageView = convertView.findViewById(R.id.btnImg2);
    79. holer2.tvTitle = convertView.findViewById(R.id.tvH2);
    80. holer2.tbCont = convertView.findViewById(R.id.tvCont2);
    81. convertView.setTag(holer2);
    82. break;
    83. }
    84. }else {
    85. switch (type){
    86. case TYPE_NEWS_1:
    87. holer = (ViewHoler)convertView.getTag();
    88. break;
    89. case TYPE_NEWS_2:
    90. holer2 = (ViewHoler2)convertView.getTag();
    91. break;
    92. }
    93. }
    94. switch (type){
    95. case TYPE_NEWS_1:
    96. //摄入值
    97. holer.imageView.setBackgroundResource(date.get(position).getImg());
    98. holer.tvTitle.setText(date.get(position).getTitile());
    99. holer.tbCont.setText(date.get(position).getContent());
    100. break;
    101. case TYPE_NEWS_2:
    102. //摄入值
    103. holer2.imageView.setBackgroundResource(date.get(position).getImg());
    104. holer2.tvTitle.setText(date.get(position).getTitile());
    105. holer2.tbCont.setText(date.get(position).getContent());
    106. break;
    107. }
    108. return convertView;
    109. }
    110. static class ViewHoler{
    111. ImageView imageView;
    112. TextView tvTitle;
    113. TextView tbCont;
    114. }
    115. static class ViewHoler2{
    116. ImageView imageView;
    117. TextView tvTitle;
    118. TextView tbCont;
    119. }
    120. }

    MainActivity.java

    1. package com.example.mylistviewadapter2;
    2. import static android.widget.Toast.LENGTH_SHORT;
    3. import androidx.appcompat.app.AppCompatActivity;
    4. import android.content.Context;
    5. import android.os.Bundle;
    6. import android.view.View;
    7. import android.widget.AdapterView;
    8. import android.widget.ListView;
    9. import android.widget.Toast;
    10. import com.example.mylistviewadapter2.entity.News;
    11. import java.util.ArrayList;
    12. import java.util.List;
    13. public class MainActivity extends AppCompatActivity {
    14. //
    15. private ListView listView;
    16. private Context context;
    17. private List listNews =null;
    18. //适配器
    19. private NewsAdpater newsAdpater=null;
    20. @Override
    21. protected void onCreate(Bundle savedInstanceState) {
    22. super.onCreate(savedInstanceState);
    23. setContentView(R.layout.activity_main);
    24. context = this;
    25. listView = findViewById(R.id.listVi);
    26. listNews = new ArrayList<>();
    27. //传入内容
    28. for(int i= 0 ; i < 10; i++){
    29. listNews.add(new News("这是标题"+i,"我是内容我是内容我是内容我是内容我是内容我是内容我是内容"+i,R.mipmap.bg));
    30. }
    31. newsAdpater = new NewsAdpater(listNews,context);
    32. listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    33. @Override
    34. public void onItemClick(AdapterView parent, View view, int position, long id) {
    35. Toast.makeText(context, "点击了第" + position + "条数据", LENGTH_SHORT).show();
    36. }
    37. });
    38. //往容器设置适配器
    39. listView.setAdapter(newsAdpater);
    40. }
    41. }

    activity_main.xml

    1. "1.0" encoding="utf-8"?>
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3. xmlns:app="http://schemas.android.com/apk/res-auto"
    4. xmlns:tools="http://schemas.android.com/tools"
    5. android:layout_width="match_parent"
    6. android:orientation="vertical"
    7. android:layout_height="match_parent"
    8. tools:context=".MainActivity">
    9. <ListView
    10. android:id="@+id/listVi"
    11. android:layout_width="match_parent"
    12. android:layout_height="wrap_content"/>
    13. LinearLayout>

    left_list_view.xml

    1. "1.0" encoding="utf-8"?>
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3. android:layout_width="match_parent"
    4. android:descendantFocusability="blocksDescendants"
    5. android:layout_height="match_parent">
    6. <ImageView
    7. android:id="@+id/btnImg"
    8. android:layout_width="200dp"
    9. android:layout_height="100dp"
    10. android:scaleType="fitXY"
    11. android:src="@mipmap/bg"
    12. />
    13. <LinearLayout
    14. android:orientation="vertical"
    15. android:layout_width="match_parent"
    16. android:layout_height="wrap_content">
    17. <TextView
    18. android:id="@+id/tvH"
    19. android:layout_width="match_parent"
    20. android:layout_height="wrap_content"
    21. android:text="我是标题"
    22. android:gravity="center"
    23. android:textSize="16sp"
    24. android:textStyle="bold"
    25. />
    26. <ScrollView
    27. android:layout_width="match_parent"
    28. android:layout_height="wrap_content">
    29. <TextView
    30. android:id="@+id/tvCont"
    31. android:layout_marginTop="10px"
    32. android:layout_width="match_parent"
    33. android:layout_height="wrap_content"
    34. android:text="我是内容文本asdfasdfasdfasdfasdfasdfs"
    35. android:textSize="12sp"
    36. android:textStyle=""
    37. />
    38. ScrollView>
    39. LinearLayout>
    40. LinearLayout>

    right_list_view.xml

    1. "1.0" encoding="utf-8"?>
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3. android:layout_width="match_parent"
    4. android:descendantFocusability="blocksDescendants"
    5. android:layout_height="match_parent">
    6. <LinearLayout
    7. android:orientation="vertical"
    8. android:layout_width="200dp"
    9. android:layout_height="100dp">
    10. <TextView
    11. android:id="@+id/tvH2"
    12. android:layout_width="match_parent"
    13. android:layout_height="wrap_content"
    14. android:text="我是标题"
    15. android:gravity="center"
    16. android:textSize="16sp"
    17. android:textStyle="bold"
    18. />
    19. <ScrollView
    20. android:layout_width="match_parent"
    21. android:layout_height="wrap_content">
    22. <TextView
    23. android:id="@+id/tvCont2"
    24. android:layout_marginTop="10px"
    25. android:layout_width="match_parent"
    26. android:layout_height="wrap_content"
    27. android:text="我是内容文本asdfasdfasdfasdfasdfasdfs"
    28. android:textSize="12sp"
    29. android:textStyle=""
    30. />
    31. ScrollView>
    32. LinearLayout>
    33. <ImageView
    34. android:id="@+id/btnImg2"
    35. android:layout_width="200dp"
    36. android:layout_height="100dp"
    37. android:scaleType="fitXY"
    38. android:src="@mipmap/bg"
    39. />
    40. LinearLayout>

  • 相关阅读:
    什么是自我接纳?如何提高自我接纳度?
    我的 Kafka 旅程 - broker
    所有Linux发行版存在shim漏洞;多个国家黑客利用AI进行网络攻击;美国挫败俄方网络间谍活动网络 | 安全周报 0216
    数据结构和算法训练:第二十五弹
    web前端零基础入门2
    openresty 的lua在返回响应后再日志里添加自定义的状态
    c++数据结构之实现链表操作
    安卓sd卡格式化数据恢复方法,您了解吗
    周一见!距离阿里巴巴开源开放周还有3天
    Wails简介
  • 原文地址:https://blog.csdn.net/jiayou2020527/article/details/134537382