概述
做安卓开发的同学应该大多都经历过adapter中在调用了notifyDataSetChanged()方法之后数据不更新的问题,作为菜鸟的我也同样踩过坑,现在写这篇文章作为总结。
正文
话不多说,上代码!
首先是Activity的布局,两个按钮,代表两种加载数据的方式,然后一个ListView。
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.indicatedemo.MainActivity">
<Button
android:id="@+id/FirstWay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="方法一" />
<Button
android:id="@+id/SecondWay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="方法二" />
<Button
android:id="@+id/ThirdWay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="方法三" />
<ListView
android:id="@+id/listView"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
接下来是模拟数据实体类Person。
public class Person {
private String name;// 姓名
private int age;// 年龄
private boolean isMan;// 是男生吗
public Person(String name, int age, boolean isMan) {
this.name = name;
this.age = age;
this.isMan = isMan;
}
public boolean isMan() {
return isMan;
}
public void setMan(boolean man) {
isMan = man;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
然后一个再正常不过的Adapter。
public class MyAdapter extends BaseAdapter {
private static final String TAG = "MyAdapter";
private List<Person> data;
private LayoutInflater inflater;
public MyAdapter(Context context) {
inflater = LayoutInflater.from(context);
}
public void setData(List<Person> data) {
this.data = data;
}
@Override
public int getCount() {
return data == null ? 0 : data.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (null == convertView) {
holder =