Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Deimoser
4 / 4 / 0
Регистрация: 16.10.2012
Сообщений: 39
#1

Google Maps API v2+ SlidingMenu - Программирование Android

29.05.2014, 20:23. Просмотров 938. Ответов 3
Метки нет (Все метки)

Написал простенькое приложение с выдвижной формой, в одном из разделов выдвижной форму находится меню с картой Google Maps, при открытии этого меню в первый раз карта загружается нормально, но стоит перейти по этому меню второй раз, как приложение крашится.

LogCat:
Код
05-29 19:20:41.962: E/AndroidRuntime(2088): FATAL EXCEPTION: main
05-29 19:20:41.962: E/AndroidRuntime(2088): android.view.InflateException: Binary XML file line #7: Error inflating class fragment
05-29 19:20:41.962: E/AndroidRuntime(2088): 	at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:713)
05-29 19:20:41.962: E/AndroidRuntime(2088): 	at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
05-29 19:20:41.962: E/AndroidRuntime(2088): 	at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
05-29 19:20:41.962: E/AndroidRuntime(2088): 	at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
05-29 19:20:41.962: E/AndroidRuntime(2088): 	at mple.testlistener.Menu3Fragment.onCreateView(Menu3Fragment.java:28)
05-29 19:20:41.962: E/AndroidRuntime(2088): 	at android.app.Fragment.performCreateView(Fragment.java:1695)
05-29 19:20:41.962: E/AndroidRuntime(2088): 	at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:885)
05-29 19:20:41.962: E/AndroidRuntime(2088): 	at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1057)
05-29 19:20:41.962: E/AndroidRuntime(2088): 	at android.app.BackStackRecord.run(BackStackRecord.java:682)
05-29 19:20:41.962: E/AndroidRuntime(2088): 	at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1435)
05-29 19:20:41.962: E/AndroidRuntime(2088): 	at android.app.FragmentManagerImpl$1.run(FragmentManager.java:441)
05-29 19:20:41.962: E/AndroidRuntime(2088): 	at android.os.Handler.handleCallback(Handler.java:730)
05-29 19:20:41.962: E/AndroidRuntime(2088): 	at android.os.Handler.dispatchMessage(Handler.java:92)
05-29 19:20:41.962: E/AndroidRuntime(2088): 	at android.os.Looper.loop(Looper.java:137)
05-29 19:20:41.962: E/AndroidRuntime(2088): 	at android.app.ActivityThread.main(ActivityThread.java:5103)
05-29 19:20:41.962: E/AndroidRuntime(2088): 	at java.lang.reflect.Method.invokeNative(Native Method)
05-29 19:20:41.962: E/AndroidRuntime(2088): 	at java.lang.reflect.Method.invoke(Method.java:525)
05-29 19:20:41.962: E/AndroidRuntime(2088): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
05-29 19:20:41.962: E/AndroidRuntime(2088): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
05-29 19:20:41.962: E/AndroidRuntime(2088): 	at dalvik.system.NativeStart.main(Native Method)
05-29 19:20:41.962: E/AndroidRuntime(2088): Caused by: java.lang.IllegalArgumentException: Binary XML file line #7: Duplicate id 0x7f060013, tag null, or parent id 0xffffffff with another fragment for com.google.android.gms.maps.MapFragment
05-29 19:20:41.962: E/AndroidRuntime(2088): 	at android.app.Activity.onCreateView(Activity.java:4751)
05-29 19:20:41.962: E/AndroidRuntime(2088): 	at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:689)
Код MainActivity, содержащий нужное меню
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
import com.jeremyfeinstein.slidingmenu.lib.app.SlidingActivity;
 
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
 
public class MainActivity extends SlidingActivity {
    
    private SlidingMenu menu;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setBehindContentView(R.layout.menu_container);
         
        SlidingMenu menu = getSlidingMenu();
        menu.setMode(SlidingMenu.LEFT);
        menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
        menu.setFadeDegree(0.35f);
        menu.setBehindWidth(400);
        
        
        FragmentTransaction ft = getFragmentManager().beginTransaction();
        ft.add(R.id.fragment_menu_container, new Menu1Fragment());
        ft.commit();
        getActionBar().setDisplayShowCustomEnabled(true);
        getActionBar().setDisplayHomeAsUpEnabled(true);
     
    }
    
 
 
    public void onClick1(View v)
    {
        FragmentTransaction ft = getFragmentManager().beginTransaction();
        ft.replace(R.id.fragment_menu_container, new Menu1Fragment());
        ft.commit();   
    }
 
    public void onClick2(View v)
    {
        FragmentTransaction ft = getFragmentManager().beginTransaction();
        ft.replace(R.id.fragment_menu_container, new Menu2Fragment());
        ft.commit();    
    }
 
    
    public void onClick3(View v)
    {
        menu.toggle(true); 
        
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {  
        case android.R.id.home: 
            menu.toggle(true);       
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}
Код активити Menu2Fragment
Java
1
2
3
4
5
6
7
8
9
10
11
public class Menu3Fragment extends Fragment   {
    GoogleMap map;
     @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
         super.onCreateView(inflater, container, savedInstanceState);
            map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
            map.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
            return inflater.inflate(R.layout.menu2, container, false);
        } 
            
}
Код menu2.xml
XML
1
2
3
4
5
6
7
8
9
10
11
<?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"
>
    <fragment 
          android:id="@+id/mapview"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:name="com.google.android.gms.maps.MapFragment"/>
</LinearLayout>
Код манифеста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="mple.testlistener"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="18" />
<uses-feature
        android:glEsVersion="0x00020000"
        android:required="true"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="mple.testlistener.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
                <meta-data
              android:name="com.google.android.maps.v2.API_KEY"
              android:value="Тут мой API ключ"/>
        <meta-data 
              android:name="com.google.android.gms.version" 
              android:value="@integer/google_play_services_version" />
    </application>
 
</manifest>
Перерыл все поисковики, ответа не нашел.
В чем может быть дело? как исправить?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.05.2014, 20:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Google Maps API v2+ SlidingMenu (Программирование Android):

Google maps API v2 - Программирование Android
Перешёл на новые API для карт google. Программирую под платформу 2.2, поэтому использую SupportMapFragment. Проблема 1. Если добавить...

Google Maps API v2 Оповещание - Программирование Android
Помогите пожалуйста. Ставлю на карте маркер: public void onMapLongClick(LatLng latLng) { MarkerOptions markerOptions = new...

Использование Google Maps API V2 - Программирование Android
Добрый день. Сейчас делаю один проект под Android, а так как в этом я почти полный новичок возник вопрос. Есть приложение которое...

Google Maps Api Key - Программирование Android
Здравствуйте! Создал приложение с использованием Google Maps. Для её работы требуется Api Key. Его я получил и карта работает. Но...

Google Maps API v2. Не отображается карта - Программирование Android
Доброго времени суток. На днях решил поработать с Google API Maps. И столкнулся с такой проблемой. Создал приложение, создал API Key...

Google Maps/Drive API for Android - Программирование Android
Столкнулся с такой пробелмой, пару месяцев назад написал приложение , которое использует API Гугл которые озвучены в теме. Всё было...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
YuraAAA
1571 / 1313 / 270
Регистрация: 25.10.2009
Сообщений: 3,432
Записей в блоге: 2
30.05.2014, 11:27 #2
Deimoser, docs которые говорят о том, что

Note: You cannot inflate a layout into a fragment when that layout includes a <fragment>. Nested fragments are only supported when added to a fragment dynamically.

Т.е. Вы не можете изначально в лейауте определить фрагмент во фрагменте. Его можно добавлять только динамически.
Deimoser
4 / 4 / 0
Регистрация: 16.10.2012
Сообщений: 39
30.05.2014, 17:39  [ТС] #3
Тогда каким образом можно вызывать карту?
YuraAAA
1571 / 1313 / 270
Регистрация: 25.10.2009
Сообщений: 3,432
Записей в блоге: 2
03.06.2014, 14:42 #4
Deimoser, добавлять на лету её. Программно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2014, 14:42
Привет! Вот еще темы с ответами:

Добавление маркеров на карту Google Maps API v2 - Программирование Android
Доброго времени суток. форумчане! Есть карта, маркеры на которую ставятся путем загрузки значений местоположения из базы данных. Но...

Ошибка при работе с Google Maps API v2 - Программирование Android
Добрый день. голову сломал уже есть примитивный код: public class MainActivity extends Activity implements ...

Добавление маркеров на карту Google Maps API v2 - Программирование Android
Доброго времени суток. Есть карта, маркеры на которую ставятся путем загрузки значений местоположения из базы данных. Есть два класса: один...

Лимит на запросы в Google Maps Directions API - Программирование Android
Какие лимиты? как понимать это: 2500 запросов на 1 устройство? или на API KEY? Можно и без ключа получать маршрут(в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
03.06.2014, 14:42
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru