重新加载列表视图显示新旧内容

时间:2013-08-20 15:52:23

标签: java android android-listview

我有一个自定义列表视图,显示数据库表的内容。 该用户可以向数据库添加一个新项目,Listview将重新加载以显示新添加的项目以及表格中的其他所有项目。

但是,在更新列表视图时使用以下代码,它将显示表中添加的内容和添加后的内容。例如:

列表视图如下所示:

Item 1
Item 2
Item 3

然后用户添加一个新项目,它应该看起来像

Item 1
Item 2
Item 3
Item 4

但它会显示

Item 1
Item 2
Item 3
Item 1
Item 2
Item 3
Item 4

我使用此代码更新Listview

 m_adapter.clear();
 for (int i = 0; i < db.getAllLists().size(); i++) {
       m_adapter.add(db.getAllLists().get(i));
 }
 m_adapter.notifyDataSetChanged();

Mylistadapter

class MyListAdapter extends ArrayAdapter<mList> {

        private ArrayList<mList> items;

        public MyListAdapter(Context context, int textViewResourceId, ArrayList<mList> items) {
                super(context, textViewResourceId, items);
                this.items = items;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
                View v = convertView;
                if (v == null) {
                    LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    v = vi.inflate(R.layout.list_row_layout, null);
                }
                mList o = items.get(position);
                if (o != null) {
                        TextView tt = (TextView) v.findViewById(R.id.ptitle);
                        Typeface font = Typeface.createFromAsset(getAssets(), "Asap-Regular.ttf");  
                        tt.setTypeface(font);  

                        if (tt != null) {
                              tt.setText(o.getName() + " (" + db.getItemsCount(o.getID()) + ")");                            
                            }
                }
                return v;
        }
    }

然后下面的代码在我的oncreate中:

    ArrayList<mList> m_orders = db.getAllLists();

    MyListAdapter m_adapter = new MyListAdapter(this, R.layout.list_row_layout, m_orders);
    ListView list1.setAdapter(m_adapter);

如果您需要查看任何其他代码,请告诉我们,谢谢

EDIT 也尝试了

 m_orders.clear();
 m_orders = db.getAllLists();
 m_adapter.addAll(m_orders);
 m_adapter.notifyDataSetChanged();

然而,它仍然显示旧列表和新列表

1 个答案:

答案 0 :(得分:0)

//首先清除集合(在你的情况下是Arraylist)

your_collection.clear();

//添加新数据,如

ArrayList<mList> m_orders = db.getAllLists();

//然后使用

刷新列表视图
m_adapter.notifyDataSetChanged();