【问题标题】:avoid that SQLite table is added in listview everytime the activity is launched避免每次启动活动时在列表视图中添加 SQLite 表
【发布时间】:2012-01-29 13:05:08
【问题描述】:

我正在尝试使用 SimpleAdapter 和 TableView 显示我的 SQLite 表的内容。 它在第一次启动时工作得很好,但是当我重新启动 Activity 时,它会在 listView 中再次添加表。 每次我从前面的菜单启动意图时都会发生这种情况。

在我看来,SimpleAdapter 是上次存储的,并在从菜单中打开 Intent 时再次添加?

也许有办法在每次启动适配器时重置它?

我是编程新手,希望有人可以帮助我:)

一些代码:

static final ArrayList<HashMap<String,String>> results = new ArrayList<HashMap<String,String>>(); 
private String tableName = DBAdapter.tableName;
private SQLiteDatabase newDB;



@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    openAndQueryDatabase();

    displayResultList();

    }



private void displayResultList() {

    ListAdapter adapter = new SimpleAdapter(
            this,
            results,
            R.layout.liste,
            new String[] {"Name","LastName","Age"},
            new int[] {R.id.item_id,R.id.item_name,R.id.item_tid}
            );
    setListAdapter(adapter);

}
    private void openAndQueryDatabase() {
        try {
            DBAdapter dbHelper = new DBAdapter(this.getApplicationContext());
            newDB = dbHelper.getWritableDatabase();
            Cursor c = newDB.rawQuery("SELECT Startnr, Navn, Tid FROM " +
                    tableName + " ORDER BY Startnr ASC" , null);

            if (c != null ) {
                if  (c.moveToFirst()) { 
                    do {
                        HashMap<String,String> list = new HashMap<String,String>();
                        String firstName = c.getString(c.getColumnIndex("Startnr"));
                        String lastName = c.getString(c.getColumnIndex("Navn"));
                        String age = c.getString(c.getColumnIndex("Tid"));
                        list.put("Name", "" + firstName);
                        list.put("LastName", "" + lastName);
                        list.put("Age", "" + age);
                        results.add(list);
                    }while (c.moveToNext());
                } 
            }           
        } catch (SQLiteException se ) {
            Log.e(getClass().getSimpleName(), "Could not create or Open the database");
        } finally {
            if (newDB != null) 
                newDB.close();                  
        }

    }

【问题讨论】:

  • 对我来说看起来不错,因为您在 onCreate 中填写您的列表,每个活动只调用一次。您是否在任何其他生命周期方法(如 onResume)中有代码?

标签: android sqlite listview listadapter simpleadapter


【解决方案1】:
Its because you have declared the "results" array list as a "static" variable.

【讨论】:

    猜你喜欢
    • 2019-10-05
    • 2022-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多