听说方舟出来了?直接so库?过来补一补安卓,万一再火一把呢?这种事情谁说的准
MainAcytivity :
package com.fitsoft; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { List<UserInfo> dataList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListView listView = findViewById(R.id.list_view); dataList = new ArrayList<>(); for(int i=0; i<50; i++){ UserInfo userInfo = new UserInfo(); userInfo.name = "张三"+i; userInfo.age = 10+i; userInfo.sex = i%2==0?"男":"女"; dataList.add(userInfo); } UserInfoListAdapter userInfoListAdapter = new UserInfoListAdapter(); listView.setAdapter(userInfoListAdapter); } class UserInfoListAdapter extends BaseAdapter { @Override public int getCount() { return dataList.size(); } @Override public Object getItem(int position) { return dataList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View itemRootView = convertView; if(itemRootView == null){ itemRootView = LayoutInflater.from(parent.getContext()) .inflate(R.layout.item_userinfo, parent, false); } TextView tvName = itemRootView.findViewById(R.id.tv_name); tvName.setText(dataList.get(position).name); TextView tvAge = itemRootView.findViewById(R.id.tv_age); tvAge.setText(String.valueOf(dataList.get(position).age) ); TextView tvSex = itemRootView.findViewById(R.id.tv_sex); tvSex.setText(dataList.get(position).sex); ImageView imageView = itemRootView.findViewById(R.id.image); if(dataList.get(position).sex.equals("男")){ imageView.setBackgroundResource(R.mipmap.ic_launcher); }else{ imageView.setBackgroundResource(R.mipmap.ic_launcher_round); } return itemRootView; } } class UserInfo{ String name; int age; String sex; } }
SimpleAdapter没啥用,直接上BaseAdapter(SimpleAdapter也是继承BaseAdapter,但是太局限了),首先创建内部类UserInfoListAdapter,使之继承BaseAdapter,然后实现里面的四个方法,这四个方法是Adapter这个接口里的,这里主要实现getView方法,首先判断convertView是否为空,如果不为空,直接复用,如果为空,则创建新的View,这里就涉及convertView的缓存机制了,ListView会自动判断加载n个新的convertView,至于n是多少呢,我就不知道怎么判断的了,当上下或者左右滑动的时候,为了提高效率,convertView就会复用,直到n个全被复用,就会复用下n个,如何创建一个新的View?利用LayoutInflater通过上下文对象找到布局管理器,通过布局管理器将item_userinfo这个xml布局转化为View对象,就创建成功了,然后利用这个对象就可以找到布局中的相关组件了(例如:itemRootView.findViewById(R.id.image);),别的都是很容易懂的,不解释了,下面放布局:
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.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"> <ListView android:id="@+id/list_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="8dp" android:layout_marginLeft="8dp" android:layout_marginTop="8dp" android:layout_marginEnd="8dp" android:layout_marginRight="8dp" android:divider="#F00" android:dividerHeight="2dp" android:overScrollMode="never" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"/> </android.support.constraint.ConstraintLayout>
其中overScrollMode是默认值为always的滑动到边界产生的效果,divider是分割线颜色
item_userinfo.xml:
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:id="@+id/tv_name" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/tv_age" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/tv_sex" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> </android.support.constraint.ConstraintLayout>
效果图: