在ListView中显示数据库项时,每次更改选项卡时它都会成倍增加

时间:2012-07-18 13:52:22

标签: android sqlite

我有3个标签,在我的一个标签中,我有一个ListView,它从SQLite数据库中提取项目。

问题是,当我更改为其他选项卡并返回此选项卡时,我的ListView显示数据库项目2次,并且每次更改选项卡时它都会相乘。

以下是显示ListView标签的代码:

public class MyActivity extends Fragment
{
   private ListView mListView;
   private DatabaseHandler db;
   List my = new ArrayList();
   MyListAdapter madapter ;

   //.....

   //...
   public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
   {
       MyItem i;
       LinearLayout mylayout = (LinearLayout) inflater.inflate(R.layout.my_layout, container, false);

       List<MyItem> l = db.getAllMyItem();

       while(!l.isEmpty() )
       {
           i = l.get(0);
           l.remove(0);
           my.add(new MyList(i.getName(),0));
       }

       mListView = (ListView) mylayout.findViewById(R.id.list);
       madapter = new MyListAdapter(getActivity(), my);

       mListView.setAdapter(madapter);
  }

我知道这是我的while循环,它一次又一次地从数据库中获取结果,但是我怎样才能显示从数据库中检索到的结果一次,即使在更改标签并返回到此{{}之后1}}标签。

1 个答案:

答案 0 :(得分:1)

您永远不会清空您的列表,因此请在while循环之前添加:

my.clear();

另外,我会按如下方式更改循环,因为您不需要从l列表中删除项目。

for (MyItem i : l) {
     my.add(new MyList(i.getName(),0));
}