【问题标题】:storing listview displaying position in database将列表视图显示位置存储在数据库中
【发布时间】:2011-10-25 02:42:49
【问题描述】:

我创建了一个 android 列表视图,允许用户重新排列其上每个项目的位置。但是,我不知道如何以最佳和最有效的方式将“更改”位置存储在数据库中,以便能够通过显示 id 函数使用排序从数据库中检索游标?

有人可以帮我解决这个问题吗?谢谢。

更新:

目前,我的想法是将项目位置存储在数据库中,作为创建后的最后一个项目位置,然后在更改后,我将更改所选项目在数据库中的位置并运行一个循环来改变它下面的所有其他项目,增量为 1。

这个逻辑有意义吗?

【问题讨论】:

    标签: android database sqlite listview


    【解决方案1】:

    您可以在数据库中创建一个名为 ordinal(整数类型)的列,以存储您希望项目在列表中出现的顺序。当用户重新排列列表时,相应地更改序数。

    编辑:

    阅读您的更新后,我认为这不会起作用,因为如果用户更改了您更新的位置下方的位置怎么办?

    为什么不根据 ListView 中的位置更新每个项目的位置?

    所以您的数据库方法之一是:

    public boolean updateOrdinal(int itemId, int ordinal)
    
    {
    
        ContentValues c = new ContentValues();
    
    
        c.put("ordinal", ordinal);
    
    
        return db.update("TableName", c, kID + "=" + itemId, null) > 0;
    
    }
    

    这将在用户“保存”列表后调用。当然,循环必须为每个项目调用它。

    【讨论】:

    • 感谢您的回复。我确实有一列指示它的位置。我已经更新了我的问题,也许你可以看看它。
    • 我还没有太多用于数据库移动的代码。我仍在考虑适当的做法。但我确实有一个听众可以为我提供职位。
    • “阅读您的更新后,我认为这不会起作用,因为如果用户更改了您更新的位置下方的位置怎么办?” - 当用户改变下面某物的位置时,下面的项目是否会成为新的选定项目并再次运行循环?
    • 因为我在想是否有必要运行如此多的数据库调用来更新每个项目的位置,并且如果有任何更好的解决方法,沿着 java.util.arraylist我可以轻松移动项目位置的样式。
    • 您将处理两个版本的数据(一个在 DB 中,一个在 arraylist 中)。总体而言,以当今手机的速度,这应该不会太糟糕,除非您谈论的是数千或数十万个项目的列表。然后你可以把它放在自己的线程中。但我怀疑任何用户都想订购超过 50-100 件物品的清单:)。
    猜你喜欢
    • 2015-09-08
    • 2019-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    相关资源
    最近更新 更多