ListView开发基础
创建并实例一个ListView需要对5个文件进行修改。
分别是activity文件,xml布局文件(包含listview控件的),item_listview.xml文件(设置listview每行长啥样),自定义的adapter以及 数据对象的类。
xml布局文件
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent">
加个listview控件然后给他起个名就好了
item_listview文件
<TextView
android:id="@+id/name"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="30dp"/>
<TextView
android:id="@+id/phone"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="15dp" />
数据对象
public class UserInfo {
private String userName;
private int phoneNumber;
public UserInfo(String userName, int phoneNumber) {
this.userName = userName;
this.phoneNumber = phoneNumber;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(int phoneNumber) {
this.phoneNumber = phoneNumber;
}
}
``
adapter
public class PhoneBookAdapter extends BaseAdapter {
private LayoutInflater mLayoutInflater;
private Context mContext;
private List<UserInfo> mUserInfos = new ArrayList<>();
private ViewHolder viewHolder;
public PhoneBookAdapter(Context context, List<UserInfo> userInfos) {
mContext = context;
mUserInfos = userInfos;
mLayoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return mUserInfos.size();
}
@Override
public Object getItem(int position) {
return mUserInfos.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null){
convertView = mLayoutInflater.inflate(R.layout.item_listview, null);
viewHolder = new ViewHolder();
viewHolder.textView = convertView.findViewById(R.id.name);
viewHolder.phone = convertView.findViewById(R.id.phone);
convertView.setTag(viewHolder);
}else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.textView.setText(mUserInfos.get(position).getUserName());
viewHolder.phone.setText(String.valueOf(mUserInfos.get(position).getPhoneNumber()));
return convertView;
}
class ViewHolder{
TextView textView;
TextView phone;
}
}
这里较基础部分对getView方法进行了优化。对converView先进行判断,如果是空的时候才对起进行赋值,避免对每一条list都重新运行一遍convertView = mLayoutInflater.inflate(R.layout.item_listview, null);
。其次对于TextView对象进行了保存,只有在首次加载的时候才需要通过findViewById的方法来寻找TextView,其余情况都可以直接用ViewHolder中保存的对象。
activity
public class ListViewDemoActivity extends AppCompatActivity {
private ListView mPhoneBook;
private List<UserInfo> userInfos;
private PhoneBookAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listview_demo_activity);
userInfos = new ArrayList<>();
userInfos.add(new UserInfo("爱仕达多", 123));
userInfos.add(new UserInfo("递四方速递", 123));
userInfos.add(new UserInfo("去玩儿", 123));
userInfos.add(new UserInfo("Yui", 123));
mPhoneBook = findViewById(R.id.listView);
adapter = new PhoneBookAdapter(ListViewDemoActivity.this, userInfos);
mPhoneBook.setAdapter(adapter);
}
}
至此一个比较简单的Listview就完成了