Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android Support Library ActionBar not Working in 2.3 Device

Tags:

Hello friends i implemented ActionBar support Library with v7 Appcompact . I extend my Activity class with ActionBarActivity . Below is my Main Class

import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.support.v7.widget.SearchView; import android.view.Menu; import android.view.MenuItem;  public class MainActivity extends ActionBarActivity {  @Override protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.activity_main);      getSupportActionBar().setDisplayHomeAsUpEnabled(true); }  @Override public boolean onCreateOptionsMenu(Menu menu) {     // Inflate the menu; this adds items to the action bar if it is present.     getMenuInflater().inflate(R.menu.activity_main, menu);     MenuItem menuItem=menu.findItem(R.id.menu_settings);     SearchView mSearchView=(SearchView)menuItem.getActionView();     return super.onCreateOptionsMenu(menu);        }      } 

In Manifest File I declare theme type like this

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.appcompactdemo" android:versionCode="1" android:versionName="1.0" >  <uses-sdk     android:minSdkVersion="8"     android:targetSdkVersion="16" />  <application     android:allowBackup="true"     android:icon="@drawable/ic_launcher"     android:label="@string/app_name"     android:theme="@style/AppTheme" >     <activity         android:name="com.example.appcompactdemo.MainActivity"         android:label="@string/app_name"          android:theme="@style/Theme.AppCompat.Light.DarkActionBar">         <intent-filter>             <action android:name="android.intent.action.MAIN" />              <category android:name="android.intent.category.LAUNCHER" />         </intent-filter>     </activity> </application> 

in style.xml like below:

<style name="ExampleTheme" parent="Theme.AppCompat.Light.DarkActionBar">     <item name="homeAsUpIndicator">@drawable/new_indicator</item>     <item name="android:homeAsUpIndicator">@drawable/new_indicator</item>   </style> 

Above Code is Working Fine with Android version 4.0 but in 2.3 device it is not working it gives error like:

java.lang.NoSuchMethodError: android.view.MenuItem.getActionView     07-26 04:11:40.900: E/AndroidRuntime(412):  at com.example.appcompactdemo.MainActivity.onCreateOptionsMenu(MainActivity.java:24) 07-26 04:11:40.900: E/AndroidRuntime(412):  at android.app.Activity.onCreatePanelMenu(Activity.java:2158) 07-26 04:11:40.900: E/AndroidRuntime(412):  at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:224)  07-26 04:11:40.900: E/AndroidRuntime(412):  at android.support.v7.app.ActionBarActivity.superOnCreatePanelMenu(ActionBarActivity.java:224) 07-26 04:11:40.900: E/AndroidRuntime(412):  at android.support.v7.app.ActionBarActivityDelegateBase$1.run(ActionBarActivityDelegateBase.java:69) 07-26 04:11:40.900: E/AndroidRuntime(412):  at android.os.Handler.handleCallback(Handler.java:587) 07-26 04:11:40.900: E/AndroidRuntime(412):  at android.os.Handler.dispatchMessage(Handler.java:92) 07-26 04:11:40.900: E/AndroidRuntime(412):  at android.os.Looper.loop(Looper.java:130) 07-26 04:11:40.900: E/AndroidRuntime(412):  at android.app.ActivityThread.main(ActivityThread.java:3683) 07-26 04:11:40.900: E/AndroidRuntime(412):  at java.lang.reflect.Method.invokeNative(Native Method) 07-26 04:11:40.900: E/AndroidRuntime(412):  at java.lang.reflect.Method.invoke(Method.java:507) 07-26 04:11:40.900: E/AndroidRuntime(412):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 07-26 04:11:40.900: E/AndroidRuntime(412):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 07-26 04:11:40.900: E/AndroidRuntime(412):  at dalvik.system.NativeStart.main(Native Method) 

So Any idea how can i solve it?

like image 641
Harshal Kalavadiya Avatar asked Jul 26 '13 05:07

Harshal Kalavadiya


1 Answers

I think the answer to your problem is in official developers guide:

You should declare search widget

<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"       xmlns:yourapp="http://schemas.android.com/apk/res-auto" >     <item android:id="@+id/action_search"          android:title="@string/action_search"          android:icon="@drawable/ic_action_search"          yourapp:showAsAction="ifRoom|collapseActionView"          yourapp:actionViewClass="android.support.v7.widget.SearchView" /> </menu> 

If you need to configure the action view (such as to add event listeners), you can do so during the onCreateOptionsMenu() callback. You can acquire the action view object by calling the static method MenuItemCompat.getActionView() and passing it the corresponding MenuItem. For example, the search widget from the above sample is acquired like this:

@Override public boolean onCreateOptionsMenu(Menu menu) {     getMenuInflater().inflate(R.menu.main_activity_actions, menu);     MenuItem searchItem = menu.findItem(R.id.action_search);     SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem); // <-- change your code to this     // Configure the search info and add any event listeners     ...     return super.onCreateOptionsMenu(menu); } 
like image 125
antonv Avatar answered Sep 21 '22 05:09

antonv