3

Irgendwie kann ich nicht einen Grund finden, meine Fragmente handeln viel anders als ich erwarte, dass sie handeln.Fragment verhält sich komisch in meinem Recyclerview

Was ich erreichen will:

what I want to accomplish

Was ich atm:

what I get atm

Meine Frage - wie kann ich das Ziel erreichen hier - in meiner Situation, immer wenige blaue Quadrate nebeneinander mit Text aus meinen DB-Beispielen.

XML:

activity_main

rec_item

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:layout_margin="4dp"> 

<ImageView 
    android:id="@+id/category_image" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:adjustViewBounds="true" 
    android:contentDescription="@null" 
    android:scaleType="centerCrop" 
    android:background="#b7b7ff"/> 

<TextView 
    android:id="@+id/name" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_gravity="bottom" 
    android:minHeight="48dp" 
    android:paddingBottom="16dp" 
    android:paddingLeft="16dp" 
    android:paddingRight="16dp" 
    android:paddingTop="16dp" 
    android:background="#E237474F" 
    style="@style/TextAppearance.AppCompat.Subhead.Inverse" 
    tools:text="TEST"/> 

</FrameLayout> 

rec_list

<android.support.v7.widget.RecyclerView 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/recycler_view" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical"/> 

Antwort

0

Ändern cursor.getString(0)-cursor.getString(cursor.getColumnIndex("name"));

Sie sind die name Annahme, daß die nullte Spalte der Cursor, und es ist wahrscheinlich nicht-- _id der nullten Spalte zu sein scheint. Oben ist der richtige Weg, um den Wert für eine bestimmte Spalte zu erhalten. (Alternativ, wenn Sie nur select name aus der Tabelle, oder wenn Sie explizit die Spalten wie in select name, _id, ... bestellen, dann vorhandenen Code funktionieren würde, auch.)

Mit dieser Änderung, die Sie Kategorienamen sehen sollte, obwohl man viele haben Duplikate, weil jedes Mal, wenn Ihre MainActivity erstellt wird, fügt es vier weitere Zeilen in die Tabelle ein. Da Sie uniqueness constraint in der Spalte name nicht haben, ist SQLite glücklich, diese Namen wieder in neue Zeilen einzufügen.

Schließlich hat Ihr ImageView noch kein Quellbild, und Sie haben es nicht explizit angegeben, daher vermute ich, dass seine Breite und Höhe beide null sind. Angesichts der Tatsache, dass Sie ein Raster erstellen möchten, scheint die falsche Sache zu sein, um das Element des Elementlayouts trotzdem zu verwenden (zumindest für die Höhe). Sie können eine PercentFrameLayout als Stammelement für das Elementlayout verwenden, um ein Seitenverhältnis festzulegen.

+0

1. Wie kann ich Duplikate überspringen? Ich habe versucht, "name TEXT unique" zu verwenden, aber ich sehe sie immer noch. 2. Wusste nicht, dass das Hinzufügen von '' src '' einen solchen Unterschied auf der Oberfläche geben würde. Jetzt habe ich - https://img.exs.lv/e/z/ezeliitis/Screenshot_2016-11-20-23-06-14.png, aber ich muss immer noch ein Padding um jedes Bild bekommen? Ich habe versucht, mit PercentFrameLayout zu spielen, aber es hat mir keinen Erfolg gebracht. –

+1

@ ThingsILove1996 Wenn Sie die Anweisung 'create table' sql geändert haben, müssen Sie entweder die vorhandene Datenbank löschen (damit eine neue erstellt wird) oder eine Versionsaktualisierung der Datenbank durchführen. Das Ändern der 'create table' sql in Java-Code hat keine Auswirkungen auf bereits gespeicherte Daten. – Karakuri

+0

Karakuri - danke. Was ist mit 2. Um jedes Fragment zu puffern? Wie soll ich es angehen? –

Verwandte Themen