-2

我正在尝试将 listview 与 sectionheaders 一起使用,如此处所述: 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();
        }
    }
}

我的问题是当我第一次添加值时它添加完美。但是当我第二次获得这些值时,这些值只是用以前的值更新,而不是向我显示第一个添加的值。

4

2 回答 2

1

这条线有问题

List<Item> items = new ArrayList<Item>();

每次它创建一个新List的并且以前的值都被清除

在方法之外声明它

于 2015-05-17T14:06:18.473 回答
1


当您第二次添加一些项目时,它们将替换为第一个,因为您每次都声明一个新的“项目”。
您应该将“项目”声明为 onActivityResult 函数之外的公共变量。
你可以这样做:

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();
    }
}
}
于 2015-05-17T14:11:41.890 回答