2016-11-24 4 views
0

Ich bin Anfänger in Android und vor ein paar Tagen fing an, Fragmente zu lernen. Kinda blieb stecken.Verbinden von verschiedenen Fragmenten mit korrekten Informationen

Die ganze Idee ist: Mit zwei Fragmenten. Fragment A. Fragment B. Beide verwenden Recyclerview + Items (Bild + Text).

Idee: https://img.exs.lv/l/a/lat-deels/frags.png

I-Fragment A. habe ich Arbeit teilweise Fragment B. habe ich Arbeit von Fragment A gehen kann -> Fragment B, indem Sie ein beliebiges Element (. Auf der Splitter A), das Problem ist, , Fragment B zeigt die gleiche Information zu jedem Element auf frag. A. Wie kann ich sicherstellen, dass Moment, wenn ich Fragmente wechsle, gibt es entsprechende Informationen (Wenn ich Getränke wähle - ich bekomme Wodka/Martini usw.) Informationen über Fragment B ist in der Datenbank sitzen, also wenn jemand aufsteht Geben Sie bei einem Modulbeispiel ein Beispiel für die Verwendung der Datenbank als Informationsquelle an.

+0

Könnten Sie den Code für GetAllMealsValues ​​Methode hinzufügen Hinzufügen klingt die Tabellenstruktur seltsam. – diedu

+0

@diedu Ich habe DBHelper hinzugefügt. Siehe meinen bearbeiteten Post. Auch ... So stelle ich mir die Tischstruktur vor. Im Moment bekommt GetAllMealsValues ​​nur alle Mahlzeiten (12 zum Testen). Ich dachte, es wäre einfacher, wenn ich db wie ich vorher gesagt habe (habe es noch nicht getan) –

Antwort

0

Erste Ändern Sie das Kategoriemodell, indem Sie die ID

012 hinzufügen
public class Category { 
    private int id; 
    ... 

    public String getId() { 
     return id; 
    } 

    public void setId(int ind) { 
     this.id = id; 
    } 
    ... 
} 

dann legen Sie es, wenn Kategorien

 Category cat = new Category(); 
     cat.setId(cursor.getInt(cursor.getColumnIndex(KEY_ID))) 
     cat.setName(cursor.getString(cursor.getColumnIndex(catName))); 
     cat.setImage(category_image_urls[i]); 
     list.add(cat); 

übergeben Sie die ID-Fragment B Laden als Rajesh vorgeschlagen

  MealsListFragment fragment = new MealsListFragment(); 
      Bundle bundle = new Bundle(); 
      bundle.putInt("categoryId", Categories.get(pos).getId()); 
      fragment.setArguments(bundle); 

den Wert im Fragment B erhalten und die getAllMealsValues ​​ändern, indem Sie die Kategorie filtern ID

Chang e DBHelper die Kategorie-ID in den Mahlzeiten Tabelle hinzuzufügen, so stellen Sie sicher, dass Sie eine Kategorie zum Essen zuzuweisen, wenn Mahlzeiten

private static final String categoryId = "category_id"; 

... 
private static final String CREATE_MEALS = "CREATE TABLE " 
    + TABLE_Meals + "(" + KEY_ID + " INTEGER PRIMARY KEY," + mealsName 
    + " TEXT unique," + desc + " TEXT," + size + " TEXT," 
    + price + " TEXT," + categoryId + " INTEGER)"; 
... 

public Cursor getMeals(int id) 
{ 
    Cursor cursor = getReadableDatabase().rawQuery("SELECT * FROM " + TABLE_Meals + " WHERE " + cagegoryId + "=" + String.valueOf(id), null); 
    return cursor; 
} 

... 

public ArrayList<Meals> GetAllMealsValues(int id) 
{ 
    ArrayList<Meals> list = new ArrayList<Meals>(); 
    Cursor cursor = getMeals(id); 
    int i = 0; // Iterator for 'do-while'. While it gets Categories names, it shall catch all the url's from array as well. 
    if (cursor.moveToFirst()) 
    { 
     do 
     { 
      Meals meal = new Meals(); 
      meal.setName(cursor.getString(cursor.getColumnIndex(mealsName))); //mealsName 
      list.add(meal); 
      i++; 
     } 
     while (cursor.moveToNext()); 
    } 
    if (cursor != null && !cursor.isClosed()) 
    { 
     cursor.close(); 
    } 
    return list; 
} 
+0

Danke. Viele Dinge wurden klarer. Außer zwei Dingen: 1) Also muss ich eine int ID Parameter @addMeals Funktion machen? 2) Ich habe Ihre Vorschläge umgesetzt. Jetzt, wenn ich auf irgendeine Kategorie klicke, bekomme ich einen leeren weißen Bildschirm - es zeigt keinen Recycler. –

+0

ja, wo auch immer Sie Ihre Mahlzeiten Daten hinzufügen, müssen Sie eine Kategorie ID zuweisen, um dies zu tun, müssen Sie addMeals Methode – diedu

+0

Studeu in Ordnung ändern. Irgendwelche Ideen, warum ich meine Recycleransicht verloren habe, wenn ich auf irgendeinen Katzennamen klicke? –

0

// IN IHREN ADAPTER

//Create instance of your fragment and pass value with bundle 
MealsListFragment fragment = new MealsListFragment(); 
     Bundle bundle = new Bundle(); 
     bundle.putSerializable("object", value);//Model class or you can pass putStringExtra 
     fragmentGivenTipDetail.setArguments(bundle); 


FragmentManager fragmentManager = c.getFragmentManager(); 
     FragmentTransaction fragmentTransaction =  fragmentManager.beginTransaction(); 
     fragmentTransaction.replace(R.id.root_layout, mealsListFragment); 
     fragmentTransaction.addToBackStack(null); 
     fragmentTransaction.commit(); 

IN FRAGMENT MealsListFragment in onCreateView

Bundle bundle=getArguments(); 
if (bundle != null) { 
    Model model = (Model) bundle.getSerializable("object"); 
      or 
    String id=bundle.getStringExtra("id"); 
    //Load your data by id or any reference from your Model data 
} 

dbHelper.GetAllMealsValues ​​() anstelle dieses Filters von ID des Mutter

+0

1. Können Sie einen Blick auf meine Datenbank und ein bisschen ändern Sie Ihren Code, damit ich klären kann, wie ich das richtige weitergeben kann Daten? Ich bin mir nicht sicher, wie man Daten per ID erhält - da ich viele Daten habe (vielleicht haben), ist es einfacher, sie nach Spalten zu sammeln - wie Sie sehen, habe ich das in meiner DBHelper-Klasse gemacht. Im Moment bekomme ich einen Fehler bei "Wert" -Parameter, wenn ich serialisieren und nicht sicher, was "Model" -Objekt ist. Es sollte mein DBHelper-Klassenobjekt sein? –

+0

Sie können Suchabfrage für die Suche nach Daten durch seine ID verwenden, haben Aussehen der Abfrage öffentlichen Modells getItemById (String itemId) { Zeichenfolge countQuery = "SELECT * FROM" + TABLE + "WHERE" + TABLE_KEY_ID + "=" + itemId "; SQLiteDatabase db = this.getReadableDatabase(); Cursorcursor = db.rawQuery (countQuery, null); ...Modell/Liste erstellen und zurückgeben } –

+0

Können Sie bitte Ihre Antwort editieren und den Code dort eingeben - unmöglich zu lesen, haha. Auch was ist mit "MODEL" ArrayList gemeint? –

Verwandte Themen