使用自定义内容提供程序时,限制SimpleCursorAdapter中的项目数

时间:2016-08-19 13:07:20

标签: android sqlite android-sqlite android-contentprovider simplecursoradapter

我正在尝试习惯使用自定义内容提供商。我已经成功地编写了一个非常简单的应用程序,只需按一个按钮就可以使用自定义内容提供程序将字符串添加到sqlite数据库。然后,这些数据库条目将显示在同一活动的ListView中。

我试图将ListView中的项目数量限制为5,但由于我缺乏经验,我不知道如何继续。

这就是我用来填充ListView

的内容
private void fillData() {

    String[] from = new String[]{commentsTable.COLUMN_COMMENT, commentsTable.COLUMN_ID};
    int[] to = new int[]{android.R.id.text1, android.R.id.text2};

    getLoaderManager().initLoader(0, null, this);
    adapter = new SimpleCursorAdapter(this, android.R.layout.two_line_list_item, null, from, to, 0);

    setListAdapter(adapter);
}

我按照本教程http://www.vogella.com/tutorials/AndroidSQLite/article.html#tutorial-sqlite-custom-contentprovider-and-loader编写了一个与教程中的应用程序类似的应用程序。

我尝试使用Cursor代替null但由于方法java.lang.NullPointerException而导致.getWritableDatabase()错误。

2 个答案:

答案 0 :(得分:0)

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1471613026000", "Effect": "Allow", "Action": [ "ec2:ModifyInstanceAttribute" ], "Resource": [ "*" ] } ] } 有方法CursorAdapter。你可以像这样在你的班级实现它。

getCount()

因此,您需要继承public int getCount() { int superCount = super.getCount(); return Math.min(superCount, 5); } 并重新定义方法SimpleCursorAdapter

创建这个课程

getCursor()

在您的代码中将public class CustomCursorAdapter extends SimpleCursorAdapter { public CustomCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags) { super(context, layout, c, from, to, flags); } @Override public int getCount() { int superCount = super.getCount(); return Math.min(superCount, 5); } } 更改为SimpleCursorAdapter

CustomCursorAdapter

答案 1 :(得分:0)

经过一番研究,我设法解决了这个问题,并认为我会为遇到这个问题的人发布答案。

在我的customContentProvider类中,我添加了变量:

public static final String QUERY_PARAMETER_LIMIT = "limit";
public static final String QUERY_PARAMETER_OFFSET = "offset";

然后编辑查询方法以包括:

public Cursor query(Uri uri, ...) {
    String limit = uri.getQueryParameter(QUERY_PARAMETER_LIMIT);
    String offset = uri.getQueryParameter(QUERY_PARAMETER_OFFSET);

    SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();

    // ...

    Cursor c = qb.query(db, projection, selection, selectionArgs, null, null, sortOrder, limitString);

    //...

    return c;
}

然后在获取光标时只需使用Uri

Uri CONTENT_URI = customContentProvider.CONTENT_URI.buildUpon()
            .appendQueryParameter(customContentProvider.QUERY_PARAMETER_LIMIT,
                    String.valueOf(limit))
            .appendQueryParameter(customContentProvider.QUERY_PARAMETER_OFFSET,
                    String.valueOf(offset))
            .build();

<强>参考

https://stackoverflow.com/a/24055457/6735035