Xin chào bạn bè tôi đã triển khai Thư viện hỗ trợ ActionBar với v7 Appcompact. Tôi mở rộng lớp Activity của mình với ActionBarActivity. Dưới đây là tôi Lớp MainThư viện hỗ trợ Android ActionBar không hoạt động trong 2.3 Thiết bị
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);
}
}
Trong Manifest File I tuyên bố loại chủ đề như thế này
<?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>
trong style.xml như dưới đây:
<style name="ExampleTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="homeAsUpIndicator">@drawable/new_indicator</item>
<item name="android:homeAsUpIndicator">@drawable/new_indicator</item>
</style>
Trên Mã được làm việc Tốt với Android phiên bản 4.0 nhưng trong 2.3 thiết bị nó không hoạt động nó cho lỗi như:
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)
Vì vậy, bất kỳ ý tưởng nào tôi có thể giải quyết nó?
Rõ ràng phương pháp này là không có sẵn trong phiên bản thấp hơn api.That tại sao điều này xảy ra. vì vậy hãy thử tăng phiên bản api. –
Tôi nghĩ bạn nên nhìn vào ActionBarActivity.onCreatePanelMenu vì cái gì đó của nó mà ít nhất là ghi đè, trong khi onCreateOptionsMenu() không phải là – Antonio
Bạn đã thêm Chế độ xem hành động như được mô tả trong [hướng dẫn dành cho nhà phát triển] (http://developer.android.com/guide) /topics/ui/actionbar.html#ActionView)? – Antonio