档案室建设网站,鸿蒙系统软件开发教程,网站代码怎么做,有创意的广告公司名称2019独角兽企业重金招聘Python工程师标准 ListView中比较简单但又非常方便的ArrayAdapter。 ArrayAdapter是BaseAdapter的派生类#xff0c;在BaseAdapter的基础上#xff0c;添加了一项重大的功能:可以直接使用泛型构造。 先来看一个简单的例子: Overrideprot… 2019独角兽企业重金招聘Python工程师标准 ListView中比较简单但又非常方便的ArrayAdapter。 ArrayAdapter是BaseAdapter的派生类在BaseAdapter的基础上添加了一项重大的功能:可以直接使用泛型构造。 先来看一个简单的例子: Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ListView listView (ListView) this.findViewById(R.id.list);UserAdapter adapter new UserAdapter(this, R.layout.list_item);adapter.add(new User(10, 小智, 男));adapter.add(new User(10, 小霞, 女));listView.setAdapter(adapter);}Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}class UserAdapter extends ArrayAdapterUser {private int mResourceId;public UserAdapter(Context context, int textViewResourceId) {super(context, textViewResourceId);this.mResourceId textViewResourceId;}Overridepublic View getView(int position, View convertView, ViewGroup parent) {User user getItem(position);LayoutInflater inflater getLayoutInflater();View view inflater.inflate(mResourceId, null);TextView nameText (TextView) view.findViewById(R.id.name);TextView ageText (TextView) view.findViewById(R.id.age);TextView sexText (TextView) view.findViewById(R.id.sex);nameText.setText(user.getName());ageText.setText(user.getAge());sexText.setText(user.getSex());return view;}}class User {private int mAge;private String mName;private String mSex;public User(int age, String name, String sex) {this.mAge age;this.mName name;this.mSex sex;}public String getName() {return this.mName;}public String getAge() {return this.mAge ;}public String getSex() {return this.mSex;}} 这里自定义了一个ArrayAdapter有关于Adapter的使用在之前的SimpleAdapter中已经涉及到了所以这里直接就是以自定义的ArrayAdapter作为例子。 我们这里需要将学生的信息罗列出来需要三个TextView: ?xml version1.0 encodingutf-8?
LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:orientationvertical TextViewandroid:idid/nameandroid:layout_widthwrap_contentandroid:layout_heightwrap_content /TextViewandroid:idid/ageandroid:layout_widthwrap_contentandroid:layout_heightwrap_content /TextViewandroid:idid/sexandroid:layout_widthwrap_contentandroid:layout_heightwrap_content //LinearLayout 在自定义ArrayAdapter的时候最神奇的地方就是我们可以指定ArrayAdapter绑定的数据类型可以是基本数据类型也可以是自定义的对象类型像是这次的User类型。对于自定义的ArrayAdapter的构造方法存在很多形式这次是传进一个View的资源Id,但是我们也可以指定绑定的数据类型。 ArrayAdapter的神奇之处就是我们竟然可以像是操作Array一样来操作ArrayAdapter像是例子中的添加操作而其他的适配器都是需要传进一个容器的。ArrayAdapter为什么可以处理对象类型的数据呢其实ArrayAdapter是使用数组中对象的toString()方法来填充指定的TextView所以我们可以通过重写对象的toString()方法来自定义ListView的显示。 Overridepublic View getView(int position, View convertView, ViewGroup parent) {User user getItem(position);LayoutInflater inflater getLayoutInflater();View view inflater.inflate(mResourceId, null);TextView text (TextView) view.findViewById(R.id.info);text.setText(user.toString());return view;}class User {private int mAge;private String mName;private String mSex;public User(int age, String name, String sex) {this.mAge age;this.mName name;this.mSex sex;}Overridepublic String toString() {return 姓名: mName 年龄: mAge 性别: mSex;}} 这样我们可以只在一行中显示所有数据。 使用ArrayAdapter最大的疑问就是我们是否需要将一个现成的容器传入ArrayAdapter中原本ArrayAdapter本身就用一般容器的基本操作像是添加新的元素等但它本身并不能完成当成容器使用我们更多的时候是要将一个容器中的元素交给ArrayAdapter由后者决定它的显示形式。 class UserAdapter extends ArrayAdapterUser {private int mResourceId;public UserAdapter(Context context, int textViewResourceId,ListUser users) {super(context, textViewResourceId, users);this.mResourceId textViewResourceId;}Overridepublic View getView(int position, View convertView, ViewGroup parent) {User user getItem(position);LayoutInflater inflater getLayoutInflater();View view inflater.inflate(mResourceId, null);TextView text (TextView) view.findViewById(R.id.info);text.setText(user.toString());return view;}} ListUser users new ArrayListUser();
users.add(new User(10, 小智, 男));
users.add(new User(10, 小霞, 女));
UserAdapter adapter new UserAdapter(this, R.layout.list_item, users);
listView.setAdapter(adapter); 如果我们将ArrayAdapter绑定的数据类型定义为Object我们可以自由的传入任何类型的容器而不需要任何有关类型转换的操作! ArrayAdapter不仅仅是可以显示TextView它当让也像是其他Adapter一样可以显示任何其他非TextView的组件: Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ListView listView (ListView) this.findViewById(R.id.list);ListObject users new ArrayListObject();users.add(10);users.add(11);UserAdapter adapter new UserAdapter(this, R.layout.list_item,R.id.info, users);listView.setAdapter(adapter);}Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}class UserAdapter extends ArrayAdapterObject {private int mResourceId;public UserAdapter(Context context, int resourceId,int textViewResourceId, ListObject users) {super(context, resourceId, textViewResourceId, users);this.mResourceId resourceId;}Overridepublic View getView(int position, View convertView, ViewGroup parent) {Object user getItem(position);LayoutInflater inflater getLayoutInflater();View view inflater.inflate(mResourceId, null);TextView text (TextView) view.findViewById(R.id.info);text.setText(user.toString());return view;}} ?xml version1.0 encodingutf-8?
LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:orientationvertical Buttonandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text点击 /TextViewandroid:idid/infoandroid:layout_widthwrap_contentandroid:layout_heightwrap_content //LinearLayout 如果我们的布局中需要其他组件必须指定该布局中用于显示ArrayAdapter中数据的TextView的Id。 如果只是方便绑定数据的话其实是没有必要专门独立个ArrayAdapter出来只要覆写getView()就可以正如使用容器就是为了方便大量数据的处理一样的道理使用ArrayAdapter也是为了处理数据较大的情况像是超过100条或者频繁动态增删数据时就可以使用ArrayAdapter而且为了方便我们刷新UIArrayAdapter也提供了setNotifyOnChange()方法这样可以降低UI的处理量使得刷新UI更加快速主要是通过停止对add,insert,remove和clear的操作来实现这点。 转载于:https://my.oschina.net/kutengshe/blog/472585