Может ли одно действие использовать один из множества фрагментов одним и тем же методом?
У меня есть несколько фрагментов, чтобы принять ввод пользователя для различной информации.Каждый фрагмент отличается, и их использование определяется вкладкой, выбранной пользователем.В настоящее время я использую оператор switch, чтобы выбрать соответствующий фрагмент для использования в Activity:
private static Fragment fragment;
FragmentManager fm = getSupportFragmentManager();
fragment = fm.findFragmentById(R.id.fragment_container);
boolean validTab = true;
switch (tabSelected){
case "Procedures":
Log.d(TAG, "To enter: " + tabSelected + "records");
fragment = new ProcedureRecordsFragment();
Log.d(TAG, "fragment is: " + fragment);
break;
case "Prescriptions":
Log.d(TAG, "To enter: " + tabSelected + "records");
fragment = new PrescriptionRecordsFragment();
Log.d(TAG, "fragment is: " + fragment);
break;
case "Immunizations":
Log.d(TAG, "To enter: " + tabSelected + "records");
fragment = new ImmunizationRecordsFragment();
break;
case "Medical Encounters":
Log.d(TAG, "To enter: " + tabSelected + "records");
fragment = new MedicalEncounterRecordsFragment();
break;
case "Allergies":
Log.d(TAG, "To enter: " + tabSelected + "records");
fragment = new AllergyRecordsFragment();
break;
case "Injuries":
Log.d(TAG, "To enter: " + tabSelected + "records");
fragment = new InjuryRecordsFragment();
break;
case "Obstetric History":
Log.d(TAG, "To enter: " + tabSelected + "records");
fragment = new ObstetricRecordsFragment();
break;
case "Family History":
Log.d(TAG, "To enter: " + tabSelected + "records");
fragment = new FamilyHistoryRecordsFragment();
break;
case "Social History":
Log.d(TAG, "To enter: " + tabSelected + "records");
fragment = new SocialHistoryRecordsFragment();
break;
case "Habits":
Log.d(TAG, "To enter: " + tabSelected + "records");
fragment = new HabitRecordsFragment();
break;
case "Development History":
Log.d(TAG, "To enter: " + tabSelected + "records");
fragment = new DevelopmentRecordsFragment();
break;
case "Demographics":
Log.d(TAG, "To enter: " + tabSelected + "records");
fragment = new DemographicRecordsFragment();
break;*/
default:
Log.d(TAG, "Invalid tab reference");
validTab = false;
break;
}
if(validTab == true){
fragment.setArguments(args);
fm.beginTransaction().add(R.id.fragment_container, fragment).commit();
}else if(validTab == false){
Log.d(TAG, "Do nothing, invalid tab reference");
}
Это успешно отображает правильный фрагмент, определенный выбранной вкладкой.
Каждый фрагмент имееттот же метод, который возвращает пользовательский ввод, на данный момент это просто строка:
public String getUserInput(){
return("String from the fragment!");
}
Метод фрагментов getUserInout
предназначен для доступа к методу действия saveRecord
, добавленному после успешного отображениякаждый фрагмент:
public void saveRecord(MenuItem item){
Log.d(TAG, "Entered: saveRecord");
String s = fragment.getUserInput();
Log.d(TAG, "String s says: " + s);
Log.d(TAG, "fragment is: " + fragment);
}
Инструкция String s = fragment.getUserInput();
приводит к сборке Gradle «Не удается разрешить метод getUserInput» Ошибка.Когда я закомментирую и String s = fragment.getUserInput();
, и Log.d(TAG, "String s says: " + s);
, и запускаю код, Log.d(TAG, "fragment is: " + fragment)
отображает ссылку на выбранный фрагмент, сгенерированную Gradle: например, D / MedicalRecordActivity: фрагмент:Экземпляр дела и D / MedicalRecordActivity: фрагмент:
Это указывает на то, что Gradle создал код, который создает один экземпляр соответствующего фрагмента, который определяется выбором вкладки.В своем исследовании я не нашел ничего, что предоставило бы мне информацию об Деятельности, используя один из множества Фрагментов, который предоставляет Активности доступ к методам активного Фрагмента.Кто-нибудь может указать мне на такую информацию?