1

Ich versuche, mich an die Verwendung von benutzerdefinierten Inhaltsanbietern zu gewöhnen. Es ist mir gelungen, eine sehr einfache Anwendung zu schreiben, die auf Knopfdruck mit Hilfe eines benutzerdefinierten Inhaltsanbieters einen String zu einer SQLite-Datenbank hinzufügt. Diese Datenbankeinträge werden dann in einer ListView in derselben Aktivität angezeigt.Beschränken Sie die Anzahl der Elemente in SimpleCursorAdapter, wenn Sie benutzerdefinierten Inhaltsanbieter verwenden

Ich versuche, die Anzahl der Elemente in der ListView auf 5 zu begrenzen, aber aufgrund meiner mangelnden Erfahrung habe ich keine Ahnung, wie es weiter geht.

Dies ist, was ich bin mit dem 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); 
} 

Ich folgte dieses Tutorial http://www.vogella.com/tutorials/AndroidSQLite/article.html#tutorial-sqlite-custom-contentprovider-and-loader zu schreiben, eine App ähnlich den App im Tutorial zu füllen.

Ich habe versucht, ein Cursor statt null verwenden, aber ich bin immer einen java.lang.NullPointerException Fehler wegen der Methode .getWritableDatabase().

Antwort

0

Nach einigen Recherchen habe ich es geschafft, diese zu lösen und dachte, ich würde eine Antwort für von jemand, der stolpert über diese Frage. Ich

In meiner customContentProvider Klasse hinzugefügt, um die Variablen:

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

und bearbeitet dann die Abfrage-Methode sind:

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; 
} 

dann, wenn ein Cursor einfach verwenden, um die 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(); 
bekommen

Referenz:

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

0

CursorAdapter hat Methode getCount(). Sie könnten es in Ihrer Klasse so implementieren.

public int getCount() { 
    int superCount = super.getCount(); 
    return Math.min(superCount, 5); 
} 

So müssen Sie SimpleCursorAdapter erben und getCursor() Methode neu zu definieren.

Crate diese Klasse

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); 
    } 
} 

Und in Ihrem Code ändern SimpleCursorAdapter zu CustomCursorAdapter

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 CustomCursorAdapter(this, android.R.layout.two_line_list_item, null, from, to, 0); 

    setListAdapter(adapter); 
} 
+0

Welche Klasse sollte ich hinzufügen, diese auch? Mein benutzerdefinierter Inhaltsanbieter? – somethingRandom

+0

@somethingRandom Ich habe einige Erweiterungen hinzugefügt. Hoffe das hilft. –

+0

Scheint nicht zu funktionieren, die App stürzt ab. Ich bekam den Fehler "java.lang.IllegalStateException: dies sollte nur aufgerufen werden, wenn der Cursor gültig ist", wenn ich die App auf dem vorherigen Code ausgeführt habe. Also habe ich die App deinstalliert und neu gebaut, aber jetzt bekomme ich den Fehler "java.lang.IllegalStateException: konnte den Cursor nicht auf Position 0 bewegen". – somethingRandom

Verwandte Themen