0

我已将我的 ListAdapter 包含在我的 EMPLOYEE 类中。并且 list1 包含从 webservices 获取的 Empname、Eno、Salary 的值。现在在员工屏幕中显示 5 条记录后...当我单击 Depatrment Activity 并返回 Employee 时。 .. 最初的 5 条记录被附加到列表中,现在有 10 条记录,依此类推.. 过程是这样进行的......请帮助我,以免添加重复项,并且必须刷新列表.

注意:clear() 或 notifydatasetchanged()、invalidate() 不起作用。

ListAdapter adapter = new SimpleAdapter(this, list1,
R.layout.employee, new String[] { "EmpName","Eno", "Salary" }, new int[]
 {R.id.ename, R.id.eno,R.id.sal});

    setListAdapter(adapter);
Listview lv = getListView();

    lv.setTextFilterEnabled(true);

    lv.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            pos = position;
            registerForContextMenu(getListView());

        }

    });


    TextView tvdept = (TextView) findViewById(R.id.Department); 
    tvdept.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
        startActivity(new Intent(Employee.this, Department.class));
        }
    });
4

1 回答 1

1

没有看到更多代码,很难确定,但我会冒险猜测......

当您离开活动并返回时,框架会尝试将您恢复到您使用savedInstanceState捆绑包的位置。它使用它来重新创建您上次在该活动中所处的位置。听起来您已经在onCreate方法中设置了列表并且没有检查savedInstanceState捆绑包,因此当您返回活动时,框架正在恢复您的列表,然后继续进入您的代码并重新创建列表(在此情况下再次添加相同的数据)。

尝试将您的列表创建代码包装在一个if检查savedInstanceState捆绑包是否存在的代码中。

像这样:

@Override
public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   if (savedInstanceState == null) {
       // do your list setup here
   }
 }

使用它,如果您返回活动并且框架保存了您的状态,它将简单地恢复它而不运行您的列表创建代码。

I know this doesn't answer the actual question, but it should solve the root issue (duplicating list data on return to activity).

于 2012-05-31T11:41:16.633 回答