0

我是 Android 编程新手,有一个基本问题。

我创建了一个ListActivity其中的每一行ListView都有一个TextView和一个RatingBar。我可以通过从预先填充的数据库中读取它们来显示TextView和中的值;RatingBar我通过自定义CursorAdapter和它的bindView()方法来做到这一点,即

public class MyCursorAdapter extends CursorAdapter {
    ...

    public void bindView(View view, Context context, final Cursor cursor) {
        TextView name = (TextView)view.findViewById(R.id.name);
        name.setText(cursor.getString(cursor.getColumnIndex(MyDbAdapter.KEY_NAME)));
        RatingBar rating = (RatingBar)view.findViewById(R.id.life_bar_rating);
        rating.setRating(cursor.getFloat(cursor.getColumnIndex(MyDbAdapter.KEY_RATING_VALUE)));
    }

    ...
}

现在,我的问题是,ListActivity我希望用户能够单击“保存”按钮,以便将所有更改一次性保存到数据库中?我将如何遍历适配器以获取行 ID 和评级值,以便可以保存它们(或者有另一种更好的方法吗?)。

我想一次性保存的原因是因为我认为每次用户更改单个评分时更新数据库是一种不好的做法(即使这更容易),因为这会导致更多的磨损在闪存上。我对此可能是错误的,但我认为闪存的读写次数是有限的。

4

1 回答 1

2

还记得适配器的后备数组吗?你用来初始化它的那个?保存;)

或者如果这不起作用......

for(int i = 0; i < listView.getAdapter().getCount(); i++)
    SaveThing(listView.getAdapter().getItem(i));

如果您需要保存的 SQLite 示例......明天。

编辑以保持评论干净:

就该对象而言-您可以自由地将其转换为列表视图中的任何内容。数据类型,而不是视图类型。

因此,例如,与字符串一起使用的 arrayAdapter 仍然返回对象。但是您肯定会将它们转换为字符串,因为您知道这就是您放入的内容。这很尴尬,但就是这样。

于 2012-07-30T15:35:10.573 回答