Я хочу быть более эффективным с моим кодом, поэтому я пытаюсь упростить вещи (не стесняйтесь помочь мне в KOTLIN )
Это о системе бронирования ресторанагде у меня 2 большие комнаты, в каждой комнате есть определенное количество таблиц (= жестко закодированное число в моей конфигурации). Я пытаюсь получить одну вкладку для каждой таблицы, где каждая вкладка содержит ListView, который получает его информацию от БД SQLite.
В настоящее время я делаю, что у меня есть две отдельные целевые страницы для каждой комнатыи для каждой таблицы я кодировал Tab. Это, конечно, не способ сделать это, но да, поэтому я здесь и прошу вашей помощи:
Главная страница выполняет обработку фрагментов с помощью SectionsPageAdapter, как вы можете видеть, что я уже реализовал "currentLocation "Строка, содержащая" Комната 1 "или" Комната 2 ".
private SectionsPageAdapter mSectionsPageAdapter;
private ViewPager mViewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_landing_one);
Intent mIntent = getIntent();
Bundle extras = mIntent.getExtras();
final String currentLocation = extras.getString("currentLocation");
mSectionsPageAdapter = new SectionsPageAdapter(getSupportFragmentManager());
// Set up the ViewPager with the sections adapter
mViewPager = (ViewPager) findViewById(R.id.container);
setupViewPager(mViewPager);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(mViewPager);
}
private void setupViewPager (ViewPager viewPager) {
SectionsPageAdapter adapter = new SectionsPageAdapter(getSupportFragmentManager());
if(currentLocation.equals(config.roomone) {
// for loop?
adapter.addFragment(new table_new_main(),"INFO");
adapter.addFragment(new table_one(),"TABLE 1");
adapter.addFragment(new table_two(),"TABLE 2");
adapter.addFragment(new table_three(),"TABLE 3");
} else { ... }
viewPager.setAdapter(adapter);
}
}
Вопрос 1
Цикл if делает свое дело, теперь, как я могу установитьдинамическое количество фрагментов на основе заданного количества таблиц? С циклом for?
Теперь фрагменты (это сложная часть, где я застрял):
открытый класс table_one расширяет Fragment {
private ListView roomlist;
ListAdapter JSON_List;
ArrayList<String> Array_dates;
ArrayList<String> Array_table,Array_dayid,Array_location;
String currentLocation;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.table, container, false);
roomlist = (ListView) view.findViewById(R.id.list_table);
String id = config.ID_table3; // I hardcoded each table number, how can I pass that through my landing page to get it here?
AppDatabase db = Room.databaseBuilder(getContext(),
AppDatabase.class, config.DB_TABLES).allowMainThreadQueries().build();
Array_dates = new ArrayList<String>();
Array_table = new ArrayList<String>();
Array_dayid = new ArrayList<String>();
Array_location = new ArrayList<>();
for(int i=0;i<value.size();i++) {
Array_dates.add(value.get(i).getDaysDate());
Array_table.add(value.get(i).getDaysPRX());
Array_dayid.add(value.get(i).getDayid());
Array_location.add(value.get(i).getLocation_id());
}
JSON_List = new RoomListAdapter(getContext(),id,Array_dates,null,null,Array_table,null,Array_dayid,Array_location,currentLocation);
roomlist.setAdapter(JSON_List);
return view;
}
ВОПРОС 2
Поэтому мне нужно перейти к каждому фрагменту: currentLocation (комната 1/2) и саму table_id, чтобы узнать, где взять данные из моей базы данных. Как я могу это сделать?