0

У меня проблема, которую я не могу решить с помощью навигационного ящика приложения. Одна из ссылок в навигационном ящике - открыть FragmentActivity (который содержит ViewPager). Другими ссылками являются фрагменты. Сейчас я настроил его как намерение, чтобы начать эту работу, но я получаю сообщение об ошибке в одном из моих фрагментов, MapsPage. Что-то связано с гнездом Фрагментов. Я поставлю логарифм ниже. Это теперь мой NavigationDrawer OnClick устанавливается:Невозможно открыть FragmentActivity из Fragment/FragmentActivity в навигационном ящике

@Override 
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 

      Fragment newFragment = new MapsPage(); 
      FragmentManager fm = getSupportFragmentManager(); 
      switch(i) { 
      case 0: 
       newFragment = new FragOne(); 
       fm.popBackStack(); 
       break; 
      case 1: 
       newFragment = new FragTwo(); 
       fm.popBackStack(); 
       break; 
      case 2: 
       newFragment = new FragThree(); 
       fm.popBackStack(); 
       break; 
      case 3: 
       Intent in = new Intent(getApplicationContext(), FragmentPagerActivity.class); 
       startActivity(in); 
       fm.popBackStack(); 
       break; 
      } 
      fm.beginTransaction().add(R.id.main, newFragment).addToBackStack("fragback").commit(); 
      drawerLayout.closeDrawer(rl); 
} 

Моя проблема с "случай 3:". MapPage, который является центральным для моего приложения, имеет фрагмент карты в XML, который вызывает там исключение при вызове этого. Вот исключение:

01-20 18:42:09.302: E/AndroidRuntime(15950): FATAL EXCEPTION: main 
01-20 18:42:09.302: E/AndroidRuntime(15950): Process: com.android.package.name, PID: 15950 
01-20 18:42:09.302: E/AndroidRuntime(15950): android.view.InflateException: Binary XML file line #7: Error inflating class fragment 
01-20 18:42:09.302: E/AndroidRuntime(15950): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:713) 
01-20 18:42:09.302: E/AndroidRuntime(15950): at android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 
01-20 18:42:09.302: E/AndroidRuntime(15950): at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
01-20 18:42:09.302: E/AndroidRuntime(15950): at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
01-20 18:42:09.302: E/AndroidRuntime(15950): at com.mdev.bluestorm.drinki.MapsPage.onCreateView(MapsPage.java:103) 
01-20 18:42:09.302: E/AndroidRuntime(15950): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1500) 
01-20 18:42:09.302: E/AndroidRuntime(15950): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927) 
01-20 18:42:09.302: E/AndroidRuntime(15950): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) 
01-20 18:42:09.302: E/AndroidRuntime(15950): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 
01-20 18:42:09.302: E/AndroidRuntime(15950): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467) 
01-20 18:42:09.302: E/AndroidRuntime(15950): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440) 
01-20 18:42:09.302: E/AndroidRuntime(15950): at android.os.Handler.handleCallback(Handler.java:733) 
01-20 18:42:09.302: E/AndroidRuntime(15950): at android.os.Handler.dispatchMessage(Handler.java:95) 
01-20 18:42:09.302: E/AndroidRuntime(15950): at android.os.Looper.loop(Looper.java:136) 
01-20 18:42:09.302: E/AndroidRuntime(15950): at android.app.ActivityThread.main(ActivityThread.java:5017) 
01-20 18:42:09.302: E/AndroidRuntime(15950): at java.lang.reflect.Method.invokeNative(Native Method) 
01-20 18:42:09.302: E/AndroidRuntime(15950): at java.lang.reflect.Method.invoke(Method.java:515) 
01-20 18:42:09.302: E/AndroidRuntime(15950): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
01-20 18:42:09.302: E/AndroidRuntime(15950): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
01-20 18:42:09.302: E/AndroidRuntime(15950): at dalvik.system.NativeStart.main(Native Method) 
01-20 18:42:09.302: E/AndroidRuntime(15950): Caused by: java.lang.IllegalArgumentException: Binary XML file line #7: Duplicate id 0x7f060060, tag null, or parent id 0x0 with another fragment for com.google.android.gms.maps.SupportMapFragment 
01-20 18:42:09.302: E/AndroidRuntime(15950): at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:296) 
01-20 18:42:09.302: E/AndroidRuntime(15950): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685) 

Это ключевая ошибка:

01-20 18: 42: 09,302: E/AndroidRuntime (15950): Вызванный: java.lang.IllegalArgumentException: Binary XML строка строки # 7: дубликат id 0x7f060060, тег null или родительский идентификатор 0x0 с другим фрагментом для com.google.android.gms.maps.SupportMapFragment

Есть ли что-то, что я могу сделать, чтобы предотвратить это? Мне нужно иметь возможность открывать FragmentActivity из ящика навигации без этой силы, потому что это противоречит фрагменту Google maps Fragment. Мне нужно, чтобы MapPage был частью backstack, единственного на самом деле, поскольку вы можете видеть, что я вывожу backstack для каждой другой страницы.

Я бы очень признателен за помощь в этом, я потерял то, что делать дальше. Заранее спасибо.

EDIT:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:map="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<fragment 
    android:id="@+id/map" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    class="com.google.android.gms.maps.SupportMapFragment"/> 
</RelativeLayout> 
+0

Пожалуйста, отправить файл XML, на который ссылается. – PearsonArtPhoto

+0

Отредактированный мой вопрос с XML Фрагмент MapsPage добавлен в нижней части. –

ответ

1

Вы звоните

fm.beginTransaction().add(R.id.main,newFragment).addToBackStack("fragback").commit(); 

после вы назвали startActivity()

+0

Вы говорите о MapsPage или FragmentActivity, который я пытаюсь открыть? Способ, которым у меня есть часть карт, хорошо работает, поэтому я немного опасаюсь его изменить. –

+0

А я вижу. Я протестировал его, комментируя fm.beginTransaction и работа Intent. Поэтому мне просто нужно вызвать fm.beginTransaction для других фрагментов. –

+0

Спасибо. Я заработал. +1 и помечен как ответ. –

Смежные вопросы