Соединение разных фрагментов с правильной информацией
Я новичок в 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 () вместо этого фильтра по идентификатору родителя