Нет идентификатора id – DialogFragment + Fragment

У меня есть DialogFragment с простым расположением. Я хочу добавить фрагмент (и в будущем заменить этот фрагмент на другой) на FrameLayout, который находится внутри макета DialogFragment. Однако метод добавления нового фрагмента не выполняется с ошибкой:

Msgstr "Нет просмотра для id 0x7f0b004f com.kennel39.diabeteslive_adtdev: id / frameAlertsContainer) для фрагмента Fragment_AlertsManage {41e7cb68}"

Я проверил свой xml, попытался использовать разные методы и прочитал ряд подобных проблем в stackoverflow, но я не могу найти решение.

public class DialogManageAlerts extends DialogFragment{ static int patient_id; public static DialogManageAlerts newInstance(int given_patient_id){ DialogManageAlerts frag = new DialogManageAlerts(); patient_id = given_patient_id; Bundle bund = new Bundle(); bund.putInt("Patient_id", patient_id); frag.setArguments(bund); return frag; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View mainView = inflater.inflate(R.layout.dialog_alerts_master, container, false); getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE); FragmentManager myFragmentManager = getFragmentManager(); FragmentTransaction myTransact = myFragmentManager.beginTransaction(); Fragment_AlertsManage manageAlertsFragment = new Fragment_AlertsManage(); myTransact.add(R.id.frameAlertsContainer, manageAlertsFragment); myTransact.commit(); return mainView; } 

layout.dialog_alerts_master:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="@color/white_regular" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp" android:background="@drawable/lower_border_background_white"> <TextView android:id="@+id/tvManageAlertsTitle" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/manage_alerts_title" android:textAppearance="?android:attr/textAppearanceLarge" android:gravity="center_horizontal" /> </LinearLayout> <FrameLayout android:id="@+id/frameAlertsContainer" android:layout_width="match_parent" android:layout_height="wrap_content" > </FrameLayout> </LinearLayout> 

И класс Fragment_AlertsManage:

 public class Fragment_AlertsManage extends Fragment implements OnClickListener { int patient_id; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View myView = inflater.inflate(R.layout.fragment_alerts_manage, container, false); //Get buttons Button btnAdd = (Button)myView.findViewById(R.id.btnAddAlert); btnAdd.setOnClickListener(this); Button btnBack = (Button)myView.findViewById(R.id.btnBack); btnBack.setOnClickListener(this); //FILL CONTENT populateContent(myView); return myView; } @Override public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.btnAddAlert: { //Switch fragment FragmentManager myFragmentManager = getFragmentManager(); FragmentTransaction myTransact = myFragmentManager.beginTransaction(); Fragment_AlertsAdd addAlertFragment = new Fragment_AlertsAdd(); myTransact.addToBackStack("Previous"); myTransact.replace(this.getView().getId(), addAlertFragment); myTransact.commit(); break; } case R.id.btnBack: { FragmentManager myFragmentManager = getFragmentManager(); FragmentTransaction myTransact = myFragmentManager.beginTransaction(); myTransact.remove(Fragment_AlertsManage.this); //Launch Home Intent homeIntent = new Intent(this.getActivity(), HomeActivity.class); homeIntent.putExtra("patient_id", patient_id); startActivity(homeIntent); getActivity().finish(); break; } } } public void populateContent(View myView){ try { ArrayList<Alert> alerts = new RetrieveAlerts(patient_id).execute().get(); ListView list = (ListView) myView.findViewById(R.id.reminder_listview); AlertsListAdapter alertsAdapter = new AlertsListAdapter(this.getActivity(), alerts); list.setAdapter(alertsAdapter); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); } } 

Почему я получаю эту ошибку и что могу сделать, чтобы ее решить?

Документ для getFragmentManager() :

Верните FragmentManager для взаимодействия с фрагментами, связанными с активностью этого фрагмента.

R.id.frameAlertsContainer находится в макете DialogFragment, а не в макете действия, поэтому он не может его найти. Вместо этого попробуйте использовать getChildFragmentManager (). Однако я не могу сказать, будет ли это работать внутри метода onCreateView (), поскольку представление еще не связано с фрагментом. Возможно, вам придется поместить его в onStart () или что-то еще.

У меня была эта проблема: для разрешенных я могу getFragmentManager () в методе OnStart () и работать отлично.

Intereting Posts
Декомпилировать .apk в Android Несколько ListViews внутри ScrollView EditText – изменить цвет фона текста (и только текст – не весь вид) Как обновить макет виджетов при включении? Есть ли способ контролировать, насколько темным становится экран, когда он тускнеет? Приложение не будет запускаться на устройстве Android, как сделать EditText редактируемым внутри ListView Нажатие на Android Notification Actions не закрывает ящик уведомлений Как сделать линейную раскладку прокручиваемой? Как остановить атаку hack / DOS на веб-API Панель инструментов Android, заполняющая весь экран Стоп ExpandableListView расширяется, пока отображается панель контекстного действия Использование библиотеки Android в eclipse и переход к файлам классов вместо исходного файла, находящегося в рабочей области eclipse Не может разрешить метод add (int, new tFragment ()). Commit () в android studion 1.0.1 Почему PhoneGap / Cordova не добавляет платформу Android?