自定义Adapter
学习过程中需要遍历数据进行显示,首先想到的是ArrayList与TextView结合,但碍于资源浪费太大,随使用自定义的ArrayAdapter和ListView结合,可使资源占用大大减少。
假定我们有个Person类,
@Param name; //属性 姓名
@Param sex; //属性 性别
@Getter //代指Get方法
@Constructor //代指构造函数
新建PersonAdapter.java文件,继承父类ArrayAdapter,并实现父类构造方法,重写getView方法
//示例代码 省略具体导包 假定Person.java已存在,ArrayList<Person> personList有若干值
/*
list_items.xml模板文件
*/
<?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"
android:orientation="vertical">
<TextView
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/sex"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
/*
activity_main.xml
*/
<?xml version="1.0" encoding="utf-8"?>
<ListView 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"
tools:context=".MainActivity"
android:orientation="vertical"
android:id="@+id/list">
</ListView>
/*
PersonAdapter.java
*/
public class PersonAdapter extends ArrayAdapter {
public PersonAdapter(Context context, int resource, List objects) {
super(context, resource, objects);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// return super.getView(position, convertView, parent);
View listView = convertView; //模板视图对象
//这段代码具体使用原因请查阅官方文档对于LayoutInflater和其方法inflate的详细解释
if (listView == null)
listView = LayoutInflater.from(getContext()).inflate(R.layout.list_items,parent,false);
Person currentPerson = (Person) getItem(position); //获取当前遍历对象
TextView nameView = listView.findViewById(R.id.name); //获取姓名容器
nameView.setText(currentPerson.getName());
TextView sexView = listView.findViewById(R.id.sex); //获取性别容器
sexView.setText(currentPerson.getSex());
return listView; //返回这个模板对象
}
}
/*
MainActivity使用示例
*/
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
List<Person> personList = new ArrayList<Person>();
Person person1 = new Person("Blank","Man");
personList.add(person1);
Person person2 = new Person("Tom","Man");
personList.add(person2);
Person person3 = new Person("Ana","Woman");
personList.add(person3);
PersonAdapter personAdapter = new PersonAdapter(this,R.layout.list_items,personList); //使用自定义Adapter
ListView list = findViewById(R.id.list);
list.setAdapter(personAdapter);
}
}
效果图: