Крах за раздувание класса

Я новичок в Android, я хочу реализовать скользящую панель действий, я читаю учебники и пишу это. в программе я использовал framelayout, заполнение framelayout с помощью mapsforge, но progrma во время выполнения имеет ошибку. Зачем? если я удаляю фрагмент и фрагмент транзакции, программа работает хорошо.

public class ShowSlidingMenu extends FragmentActivity {

private DrawerLayout drawerLayout;
private ActionBarDrawerToggle actionBarDrawerToggle;
private ListView listView;

private CharSequence mDrawerTitle;

// used to store app title
private CharSequence mTitle;

// slide menu items
private String[] navMenuTitles;
private TypedArray navMenuIcons;

private ArrayList<NavDrawerItem> navDrawerItems;
private NavDrawerListAdapter adapter;

MapView mapView;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.sliding);

    Fragment fragment=new MapFragmentTest();
    FragmentTransaction ft= getSupportFragmentManager().beginTransaction();
    ft.replace(R.id.mapView, fragment).commit();

    mTitle = mDrawerTitle = getTitle();
    navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items);
    navMenuIcons = getResources()
            .obtainTypedArray(R.array.nav_drawer_icons);

    drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    listView = (ListView) findViewById(R.id.list_slidermenu);

    navDrawerItems = new ArrayList<NavDrawerItem>();

    navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons
            .getResourceId(0, -1)));
    // Find People
    navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons
            .getResourceId(1, -1)));
    // Photos
    navDrawerItems.add(new NavDrawerItem(navMenuTitles[2], navMenuIcons
            .getResourceId(2, -1)));
    // Communities, Will add a counter here
    navDrawerItems.add(new NavDrawerItem(navMenuTitles[3], navMenuIcons
            .getResourceId(3, -1)));
    // Pages
    navDrawerItems.add(new NavDrawerItem(navMenuTitles[4], navMenuIcons
            .getResourceId(4, -1)));
    // What's hot, We will add a counter here
    navDrawerItems.add(new NavDrawerItem(navMenuTitles[5], navMenuIcons
            .getResourceId(5, -1)));

    navMenuIcons.recycle();

    adapter = new NavDrawerListAdapter(getApplicationContext(),
            navDrawerItems);
    listView.setAdapter(adapter);

    // enabling action bar app icon and behaving it as toggle button
    getActionBar().setDisplayHomeAsUpEnabled(true);
    getActionBar().setHomeButtonEnabled(true);

    actionBarDrawerToggle = new ActionBarDrawerToggle(
             this, drawerLayout, R.drawable.ic_drawer,
            R.string.app_name, R.string.app_name) {
        public void onDrawerClosed(View view) {
            getActionBar().setTitle(mTitle);
            // calling onPrepareOptionsMenu() to show action bar icons
            invalidateOptionsMenu();
        }

        public void onDrawerOpened(View drawerView) {
            getActionBar().setTitle(mDrawerTitle);
            // calling onPrepareOptionsMenu() to hide action bar icons
            invalidateOptionsMenu();
        }
    };
    drawerLayout.setDrawerListener(actionBarDrawerToggle);

    listView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {
            // TODO Auto-generated method stub
            displayView();
        }

    });
}

//remove onCreateOptionsMenu()

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // TODO Auto-generated method stub
    if(actionBarDrawerToggle.onOptionsItemSelected(item))
        return true;

    //remove action bar settings 

    return super.onOptionsItemSelected(item);
}

//remove onPrepareOptionsMenu()

@Override
public void setTitle(CharSequence title) {
    // TODO Auto-generated method stub
    mTitle=title;
    getActionBar().setTitle(mTitle);
}

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    // Sync the toggle state after onRestoreInstanceState has occurred.
    actionBarDrawerToggle.syncState();
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    // Pass any configuration change to the drawer toggls
    actionBarDrawerToggle.onConfigurationChanged(newConfig);
}

public void displayView(){
    Toast.makeText(getApplicationContext(), "hahaha", Toast.LENGTH_LONG).show();
}
}

XML-файл:

<?xml version="1.0" encoding="UTF-8"?>
 <android.support.v4.widget.DrawerLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<RelativeLayout
    android:id="@+id/mainView"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#FFFFFF" >


    <FrameLayout 
        android:id="@+id/mapView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"></FrameLayout>


</RelativeLayout>

<ListView
    android:id="@+id/list_slidermenu"
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:background="@color/list_background"
    android:choiceMode="singleChoice"
    android:divider="@color/list_divider"
    android:dividerHeight="1dp"
    android:listSelector="@drawable/list_selector" />

</android.support.v4.widget.DrawerLayout>

fragment_layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<org.mapsforge.android.maps.MapView
  xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/mapView"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />

MapFragmentTest

public class MapFragmentTest extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.fragment_layout, container, false);

    return rootView;
}

}

журнал:

01-27 09:08:48.185: E/AndroidRuntime(13176): FATAL EXCEPTION: main
01-27 09:08:48.185: E/AndroidRuntime(13176): java.lang.RuntimeException: Unable to start activity ComponentInfo {org.example.sendandreceivesms/org.example.slidingmenubar.ShowSlidingMenu}: android.view.InflateException: Binary XML file line #6: Error inflating class org.mapsforge.android.maps.MapView

3 ответа

У меня есть похожее сообщение об ошибке, и я исправил его следующим образом:

  • Добавьте все файлы JAR (который включает в себя mapsforge-core-0.5.0.jar, mapsforge-map-0.5.0.jar, mapsforge-map-android-0.5.0.jar, mapsforge-map-reader-0.5.0.jar) и проверьте его в конфигурации пути сборки Java для Android ("Проект"> "Свойства"> "Путь сборки Java"> "Порядок и экспорт").
  • Добавьте эту строку в классы перед картой или добавьте в класс приложения AndroidGraphicFactory.createInstance(this.getApplication());Если это не добавлено, оно будет конфликтовать в соответствии с их документацией

Надеюсь, что выше помогает:)

Вы объявили необходимые разрешения в файле manifest.xml для отображения карты.

согласно документации, вы должны добавить

The map library requires only one permission for writing cached images to the external storage (typically the phones SD card). Add the following line to your applications AndroidManifest.xml file:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

и используйте приведенный ниже код для отображения карты

import android.os.Bundle;
import java.io.File;
import org.mapsforge.android.maps.MapActivity;
import org.mapsforge.android.maps.MapView;

public class HelloMapView extends MapActivity {
 @Override
 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
    MapView mapView = new MapView(this);
    mapView.setClickable(true);
    mapView.setBuiltInZoomControls(true);
    mapView.setMapFile(new File("/sdcard/path/to/mapfile.map"));
    setContentView(mapView);
}
}

+ Изменить

<org.mapsforge.android.maps.MapView

в

<com.google.android.gms.maps.MapView

Поскольку вы упомянули в комментарии, что вы используете библиотеку mapsforge, следуйте

http://code.google.com/p/mapsforge/wiki/GettingStartedMapView

Другие вопросы по тегам