Вот пример из приложения McDonalds, где в фрагменте "Меню" есть RecyclerView, при нажатии на любой элемент которого появляется точно такой же RecyclerView (только с измененным наполнением, которое зависит от выбранного элемента),и при следующем нажатии это снова повторяется. Как можно реализовать точно такую же навигацию? (и как передавать данные о выбранной кнопке в такой сложной структуре) Кто уже сталкивался с этим?
Можно сделать с помощью стека и адаптеров, если у вас адаптеры с разными моделями данных. Например, у меня будет экран с глубиной три. Первый уровень - это FirstAdapter с моделью FoodListModel. Второй уровень - это SecondAdapter с моделью FoodTypeModel. Третий уровень - это ThirdAdapter с моделью FoodModel.
Делаем интерфейс-коллбэк, который может принимать любой объект.
public interface OnItemClickListener<T> {
void onClick(T t);
}
Потом в нашей активити в коллбэке мы проверяем объект на тип и в зависимости от этого создаем адаптер, который нужен.
Стек тут используется, чтобы поддержать обратную навигацию через кнопку назад.
public class MainActivity extends AppCompatActivity implements OnItemClickListener{
private RecyclerView rv;
private RecyclerView.Adapter myAdapter;
private Stack<RecyclerView.Adapter> adapterStack = new Stack<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rv = findViewById(R.id.rv);
rv.setLayoutManager(new LinearLayoutManager(this));
myAdapter = new FirstAdapter(this);
rv.setAdapter(myAdapter);
}
@Override
public void onClick(Object o) {
adapterStack.push(myAdapter);
if(o instanceof FoodListModel) {
//тут можно подгрузить данные и положить в адаптер
myAdapter = new SecondAdapter(this);
}
if(o instanceof FoodTypeModel) {
//тут можно подгрузить данные и положить в адаптер
myAdapter = new ThirdAdapter(this)
};
if(o instanceof FoodModel) {
//можно стартануть активити с покупкой
};
rv.setAdapter(myAdapter);
}
@Override
public void onBackPressed() {
if(!adapterStack.isEmpty()) {
myAdapter = adapterStack.pop();
rv.setAdapter(myAdapter);
}else{ //если пустой стек значит мы на первом списке и можно выйти с экрана
super.onBackPressed();
}
}
}
Если модели данных одинаковые можно использовать один адаптер и экзмепляры адаптеров складывать в стек без проверки, но тогда нужно будет решить проблему того, как понять, что мы достигли конца и открыть конечный экран. В самом примере из мака последний экран отличается, поэтому адаптер там другой.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Пишу приложение используя JavaFX, работаю с таблицами, хочу вызвать метод в контроллере, который написан в Main, но почему-то не вижу егоДля большего...
Как можно сделать перенос текста на следующую строку при вводе? (Когда текст доходит к границе поля,он как бы начинает двигать его,скрывая...
В чем фишка ServletConfig? Да я понимаю что он нужен что бы передать какие либо параметры в сервлет через дискриптор развертыванияНо зачем это надо?...
Подскажите может есть какой то плагин который будет создавать exe файл из jar файла?