Соединение разных фрагментов с правильной информацией

Я новичок в Android и несколько дней назад начал изучать фрагменты. Вид застрял.

Вся идея такова: иметь два фрагмента. Фрагмент A. Фрагмент B. Оба используют Recyclerview+Items (Изображение + текст).

Идея: https://img.exs.lv/l/a/lat-deels/frags.png

У меня есть рабочий фрагмент A. У меня есть частично рабочий фрагмент B. Я могу перейти от фрагмента A -> к фрагменту B, щелкнув любой элемент (на фрагменте A), проблема в том, что фрагмент B показывает одинаковую информацию для каждого элемента на осколочная. A. Как я могу убедиться, что в тот момент, когда я переключаю фрагменты, он дает соответствующую информацию (если я выбираю напитки - я получаю водку / мартини и т. Д.) Информация о фрагменте B находится в базе данных, поэтому, если кто-то собирается дать Пример модуля, обязательно включите пример использования базы данных в качестве источника информации.

2 ответа

Решение

Сначала измените модель категории, добавив идентификатор

public class Category {
    private int id;
    ...

    public String getId() {
        return id;
    }

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

затем установите его при загрузке категории

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

передать идентификатор фрагменту B, как предложил Раджеш

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

получить значение во фрагменте B и изменить getAllMealsValues ​​для фильтрации по идентификатору категории

    if (bundle != null) {
        //Load your data by id or any reference from your Model data

        RecyclerView rv = (RecyclerView) view.findViewById(R.id.recycler_view);
        final Activity activity = getActivity();
        rv.setLayoutManager(new GridLayoutManager(activity, 2));
        rv.setAdapter(new MealsAdapter(this.getActivity(),  dbHelper.GetAllMealsValues(bundle.getInt("categoryId")) ));
        //ADDING SOME SPACE AROUND FRAGMENTS

        int mMargin = 15;
        rv.addItemDecoration(new SpacesItemDecoration(mMargin));
    }

Измените DBHelper, чтобы добавить идентификатор категории в таблицу блюд, просто убедитесь, что при добавлении блюд назначена категория для еды.

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

// В ВАШЕМ АДАПТЕРЕ

//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 в 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 ​​() вместо этого фильтра по идентификатору родителя

Другие вопросы по тегам