Pregunta

I'm develop some app with sliding menu. when i try to run this on my galaxy 4s(api 18+ 4.3.3) its work fine! but when i run this on xperia arc (api 8 ver 2.3.4) the app crash. i know its dependent on Support library and i use : import android.support.v4.app.ActionBarDrawerToggle; import android.support.v4.widget.DrawerLayout;

and i need to use :

import android.support.v7.app.ActionBar;

so i added to my project the support library and connect the support library to him.

but i dont know how to handle the support and what i need to chage on my code:

my java code (v4){

import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.widget.DrawerLayout;

public class MainActivity extends Activity implements OnClickListener, OnLongClickListener , OnTouchListener , OnItemClickListener{
/////////////////
ArrayList<ItemInSetting > listSetting = new ArrayList<ItemInSetting>();
CustomAdapterSetting adapterSetting;
DrawerLayout drawer;
ActionBarDrawerToggle toggle;
//////////////////

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    settingItems();
     }

public void settingItems(){

    getActionBar().setHomeButtonEnabled(true);
    getActionBar().setDisplayHomeAsUpEnabled(true);
    drawer = (DrawerLayout) findViewById(R.id.drawer);
    toggle = new ActionBarDrawerToggle(this, drawer, R.drawable.ic_drawer, 0, 0){

        @Override
        public void onDrawerOpened(View drawerView) {
            getActionBar().setTitle("menu");

            invalidateOptionsMenu();
        }

        @Override
        public void onDrawerClosed(View drawerView) {
            getActionBar().setTitle("app title");
            invalidateOptionsMenu();
        }

    };drawer.setDrawerListener(toggle);

    listSetting.add(new ItemInSetting("ist1", R.drawable.calende_bigg));
    listSetting.add(new ItemInSetting("ist2", R.drawable.calende_bigg));
    listSetting.add(new ItemInSetting("ist3", R.drawable.calende_bigg));
    listSetting.add(new ItemInSetting("ist4", R.drawable.calende_bigg));

    lvSetting = (ListView) findViewById(R.id.listSetting);
    lvSetting.setOnItemClickListener(this);
    adapterSetting = new CustomAdapterSetting(listSetting, this);
    lvSetting.setAdapter(adapterSetting);
}

@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
        long id) {
    date = new Date();
    switch (position) {

    case 0:
        Intent intent = new Intent (MainActivity.this,ListOfHours.class);
        startActivity(intent);

        break;      
    case 1:
        getSetting();

        if(sickIsOn){
            cancelingFreeday(false);
        }else{
            addingManualMenu();
        }

        break;      
    case 2:
        changingSetting(" ");
        break;
    case 3:

        sendContact();
        break;

    default:
        break;
    }
    drawer.closeDrawers();
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // toggle nav drawer on selecting action bar app icon/title

    if (toggle.onOptionsItemSelected(item)) {
        return true;
    }
      // Handle action bar actions click
    switch (item.getItemId()) {
    case R.id.action_settings:
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}

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

    toggle.syncState();
}

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

    toggle.onConfigurationChanged(newConfig);
}

my xml:

<android.support.v4.widget.DrawerLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center_vertical"
    android:background="@drawable/new_back"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <FrameLayout
        android:id="@+id/FrameLayout1"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <ListView
            android:id="@+id/listSetting"
            android:layout_width="240dp"
            android:layout_height="wrap_content"
            android:layout_gravity="start"
            android:background="@android:color/darker_gray"
            android:choiceMode="singleChoice"
            android:listSelector="@drawable/list_selector" >
        </ListView>
    </FrameLayout>

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

my manifest:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.bib.workclock"
    android:versionCode="52"
    android:versionName="3.0.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />
    <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"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/icon_new3"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
   <activity android:name="com.google.ads.AdActivity" 
   android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>

        <activity
            android:name="com.bibas.workclock.MainActivity"
            android:label="@string/app_name" android:screenOrientation="portrait" android:windowSoftInputMode="adjustPan"
            >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="ListOfHours"   ></activity>

        <activity android:name="HelpPage"></activity>

        <activity android:name="info" android:screenOrientation="portrait"></activity>

    </application>
   </manifest>

this the locat error when i try to run on xperia :

05-04 01:59:05.058: E/AndroidRuntime(15484): FATAL EXCEPTION: main
05-04 01:59:05.058: E/AndroidRuntime(15484): java.lang.NoSuchMethodError: com.bba.workclock.MainActivity.getActionBar
05-04 01:59:05.058: E/AndroidRuntime(15484):    at com.bba.workclock.MainActivity.settingItems(MainActivity.java:1657)
05-04 01:59:05.058: E/AndroidRuntime(15484):    at com.bba.workclock.MainActivity.onCreate(MainActivity.java:124)
05-04 01:59:05.058: E/AndroidRuntime(15484):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
05-04 01:59:05.058: E/AndroidRuntime(15484):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1623)
05-04 01:59:05.058: E/AndroidRuntime(15484):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1675)
05-04 01:59:05.058: E/AndroidRuntime(15484):    at android.app.ActivityThread.access$1500(ActivityThread.java:121)
05-04 01:59:05.058: E/AndroidRuntime(15484):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:943)
05-04 01:59:05.058: E/AndroidRuntime(15484):    at android.os.Handler.dispatchMessage(Handler.java:99)
05-04 01:59:05.058: E/AndroidRuntime(15484):    at android.os.Looper.loop(Looper.java:130)
05-04 01:59:05.058: E/AndroidRuntime(15484):    at android.app.ActivityThread.main(ActivityThread.java:3701)
05-04 01:59:05.058: E/AndroidRuntime(15484):    at java.lang.reflect.Method.invokeNative(Native Method)
05-04 01:59:05.058: E/AndroidRuntime(15484):    at java.lang.reflect.Method.invoke(Method.java:507)
05-04 01:59:05.058: E/AndroidRuntime(15484):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
05-04 01:59:05.058: E/AndroidRuntime(15484):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624)
05-04 01:59:05.058: E/AndroidRuntime(15484):    at dalvik.system.NativeStart.main(Native Method)

here is project like mine: http://speedy.sh/UKsrV/SlidingMenu.zip if any one can fix that code and give it to me back i appreciate alot

How can i fix this?!! please help me :(((

I FIX THAT PROBLEM BUT KNOW ON MY TABLET IT'S CRASH .

here the locat error:

05-11 23:10:22.127: E/AndroidRuntime(31723): FATAL EXCEPTION: main
05-11 23:10:22.127: E/AndroidRuntime(31723): java.lang.IllegalStateException: Child android.widget.FrameLayout@41f91e40 at index 0 does not have a valid layout_gravity - must be Gravity.LEFT, Gravity.RIGHT or Gravity.NO_GRAVITY
05-11 23:10:22.127: E/AndroidRuntime(31723):    at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:721)
05-11 23:10:22.127: E/AndroidRuntime(31723):    at android.view.View.measure(View.java:15479)
05-11 23:10:22.127: E/AndroidRuntime(31723):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4826)
05-11 23:10:22.127: E/AndroidRuntime(31723):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
05-11 23:10:22.127: E/AndroidRuntime(31723):    at android.view.View.measure(View.java:15479)
05-11 23:10:22.127: E/AndroidRuntime(31723):    at android.widget.LinearLayout.measureVertical(LinearLayout.java:833)
05-11 23:10:22.127: E/AndroidRuntime(31723):    at android.widget.LinearLayout.onMeasure(LinearLayout.java:574)
05-11 23:10:22.127: E/AndroidRuntime(31723):    at android.view.View.measure(View.java:15479)
05-11 23:10:22.127: E/AndroidRuntime(31723):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4826)
05-11 23:10:22.127: E/AndroidRuntime(31723):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
05-11 23:10:22.127: E/AndroidRuntime(31723):    at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2359)
05-11 23:10:22.127: E/AndroidRuntime(31723):    at android.view.View.measure(View.java:15479)
05-11 23:10:22.127: E/AndroidRuntime(31723):    at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1968)
05-11 23:10:22.127: E/AndroidRuntime(31723):    at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1214)
05-11 23:10:22.127: E/AndroidRuntime(31723):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1387)
05-11 23:10:22.127: E/AndroidRuntime(31723):    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107)
05-11 23:10:22.127: E/AndroidRuntime(31723):    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4464)
05-11 23:10:22.127: E/AndroidRuntime(31723):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
05-11 23:10:22.127: E/AndroidRuntime(31723):    at android.view.Choreographer.doCallbacks(Choreographer.java:555)
05-11 23:10:22.127: E/AndroidRuntime(31723):    at android.view.Choreographer.doFrame(Choreographer.java:525)
05-11 23:10:22.127: E/AndroidRuntime(31723):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
05-11 23:10:22.127: E/AndroidRuntime(31723):    at android.os.Handler.handleCallback(Handler.java:615)
05-11 23:10:22.127: E/AndroidRuntime(31723):    at android.os.Handler.dispatchMessage(Handler.java:92)
05-11 23:10:22.127: E/AndroidRuntime(31723):    at android.os.Looper.loop(Looper.java:137)
05-11 23:10:22.127: E/AndroidRuntime(31723):    at android.app.ActivityThread.main(ActivityThread.java:4895)
05-11 23:10:22.127: E/AndroidRuntime(31723):    at java.lang.reflect.Method.invokeNative(Native Method)
05-11 23:10:22.127: E/AndroidRuntime(31723):    at java.lang.reflect.Method.invoke(Method.java:511)
05-11 23:10:22.127: E/AndroidRuntime(31723):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:994)
05-11 23:10:22.127: E/AndroidRuntime(31723):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:761)
05-11 23:10:22.127: E/AndroidRuntime(31723):    at dalvik.system.NativeStart.main(Native Method)
¿Fue útil?

Solución

ActionBar is available from api level 11. To support below api level 11 you need to use AppCompat from the support library. Reference AppCompat in your android project.

You need to extend ActionBarActivity. Use theme derived from Theme.AppCompat in manifest and use getSupportActionBar().

Complete example @

Navigation Drawer with backword compatibility android

Check Adding libraries with resources

https://developer.android.com/tools/support-library/setup.html

And read

http://developer.android.com/guide/topics/ui/actionbar.html

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top