我的适配器 notifyDataSetChanged() 有问题吗?
Is something wrong with my Adapter notifyDataSetChanged()?
我正在尝试将列表视图与此处提到的节标题一起使用:
Android ListView headers
这些值是动态填充的,如下所示:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d(TAG, "onActivityResult called");
if((requestCode == 1)&&(resultCode == Activity.RESULT_OK)){
if(data!= null){
AddedTask=data.getStringExtra("NewTask");
CategoryName=data.getStringExtra("CategoryItem");
TaskTime=data.getStringExtra("TaskTime");
List<Item> items = new ArrayList<Item>();
items.add(new Header(CategoryName));
items.add(new ListItem(AddedTask, TaskTime));
TwoTextArrayAdapter adapter = new TwoTextArrayAdapter(getActivity(), items);
listViewData.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
}
}
我的问题是当我第一次添加值时它添加完美。但是当我第二次获得这些值时,这些值只是用以前的值更新,而不是显示第一个添加的值。
这一行有问题
List<Item> items = new ArrayList<Item>();
每次创建一个新的List
并清除以前的值
在方法外声明它
当您第二次添加一些项目时,它们将替换为第一个项目,因为您每次都声明了一个新的 "items" 。
您应该在 onActivityResult 函数之外将 "items" 声明为 public 变量。
你可以这样做:
List<Item> items;
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d(TAG, "onActivityResult called");
if((requestCode == 1)&&(resultCode == Activity.RESULT_OK)){
if(data!= null){
AddedTask=data.getStringExtra("NewTask");
CategoryName=data.getStringExtra("CategoryItem");
TaskTime=data.getStringExtra("TaskTime");
if (items == null)
items = new ArrayList<Item>();
items.add(new Header(CategoryName));
items.add(new ListItem(AddedTask, TaskTime));
TwoTextArrayAdapter adapter = new TwoTextArrayAdapter(getActivity(), items);
listViewData.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
}
}
我正在尝试将列表视图与此处提到的节标题一起使用: Android ListView headers
这些值是动态填充的,如下所示:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d(TAG, "onActivityResult called");
if((requestCode == 1)&&(resultCode == Activity.RESULT_OK)){
if(data!= null){
AddedTask=data.getStringExtra("NewTask");
CategoryName=data.getStringExtra("CategoryItem");
TaskTime=data.getStringExtra("TaskTime");
List<Item> items = new ArrayList<Item>();
items.add(new Header(CategoryName));
items.add(new ListItem(AddedTask, TaskTime));
TwoTextArrayAdapter adapter = new TwoTextArrayAdapter(getActivity(), items);
listViewData.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
}
}
我的问题是当我第一次添加值时它添加完美。但是当我第二次获得这些值时,这些值只是用以前的值更新,而不是显示第一个添加的值。
这一行有问题
List<Item> items = new ArrayList<Item>();
每次创建一个新的List
并清除以前的值
在方法外声明它
当您第二次添加一些项目时,它们将替换为第一个项目,因为您每次都声明了一个新的 "items" 。
您应该在 onActivityResult 函数之外将 "items" 声明为 public 变量。
你可以这样做:
List<Item> items;
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d(TAG, "onActivityResult called");
if((requestCode == 1)&&(resultCode == Activity.RESULT_OK)){
if(data!= null){
AddedTask=data.getStringExtra("NewTask");
CategoryName=data.getStringExtra("CategoryItem");
TaskTime=data.getStringExtra("TaskTime");
if (items == null)
items = new ArrayList<Item>();
items.add(new Header(CategoryName));
items.add(new ListItem(AddedTask, TaskTime));
TwoTextArrayAdapter adapter = new TwoTextArrayAdapter(getActivity(), items);
listViewData.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
}
}