Почему моя панель действий вылетает на Galaxy S2, но не на Galaxy S4?

#android #android-actionbar

#Android #android-панель действий

Вопрос:

Я пытаюсь разработать приложение с searchView actionBar помощью . Теперь на Galaxy S4 он работает нормально, но на Galaxy S2 он выходит из строя.

Может быть, это что-то о «ActionBarActivity», но я использую фрагменты. Я понятия не имею, почему это происходит. Вот моя активность:

 public class SendSms extends Fragment implements OnClickListener, OnItemClickListener ,SearchView.OnQueryTextListener {

    public static final String LOG = "myLog";

    SearchView mSearchView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        setHasOptionsMenu(true);
            v = inflater.inflate(R.layout.send_sms123, container,false);
            context = getActivity();

}

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.main, menu);


          inflater = context.getMenuInflater();

            MenuItem searchItem = menu.findItem(R.id.action_search);
             mSearchView = (SearchView) searchItem.getActionView();
             mSearchView.setOnQueryTextListener(this);
             mSearchView.setOnSearchClickListener(this);
             mSearchView.setQueryHint("Type name or number");


    menu.add("Load contact").setOnMenuItemClickListener(new OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            loadContactAgain();
            return false;
        }
    });
    menu.add("Clean contact").setOnMenuItemClickListener(new OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            DeleteAll();
            return false;
        }
    });
    //TEMP
    menu.add("Developer mode").setOnMenuItemClickListener(new OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            developerMode();
            return false;
        }
    });
        menu.add("Stop service").setOnMenuItemClickListener(new OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                context.stopService(new Intent(context,ServiceSender.class));
                return false;
            }
        });
        super.onCreateOptionsMenu(menu,inflater);
    }



    @Override
    public boolean onQueryTextSubmit(String query) {

    }

    @Override
    public boolean onQueryTextChange(String newText) {

        adapterContact.filter(newText);

        if(!adapterContact.isEmpty())
        setVisibiltyListBar(newText);
        return false;
    }
  

меню / главная:

 <item android:id="@ id/action_search"
      android:title="Search"
      android:icon="@android:drawable/ic_menu_search"
      android:showAsAction="always"
      android:actionViewClass="android.widget.SearchView" />
  

Это LogCat:

 06-30 06:40:52.485: E/AndroidRuntime(6036): FATAL EXCEPTION: main
06-30 06:40:52.485: E/AndroidRuntime(6036): java.lang.NullPointerException
06-30 06:40:52.485: E/AndroidRuntime(6036):     at com.bibas.timingsms.SendSms.onCreateOptionsMenu(SendSms.java:609)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at android.support.v4.app.Fragment.performCreateOptionsMenu(Fragment.java:1582)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at android.support.v4.app.FragmentManagerImpl.dispatchCreateOptionsMenu(FragmentManager.java:1956)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:225)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:408)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at com.android.internal.policy.impl.PhoneWindow.invalidatePanelMenu(PhoneWindow.java:759)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at android.app.Activity.invalidateOptionsMenu(Activity.java:2552)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at android.support.v4.app.ActivityCompatHoneycomb.invalidateOptionsMenu(ActivityCompatHoneycomb.java:29)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at android.support.v4.app.FragmentActivity.supportInvalidateOptionsMenu(FragmentActivity.java:648)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at android.support.v4.app.Fragment.setHasOptionsMenu(Fragment.java:803)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at com.bibas.timingsms.SendSms.onCreateView(SendSms.java:104)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at android.support.v4.app.Fragment.performCreateView(Fragment.java:1500)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:472)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at android.support.v4.view.ViewPager.populate(ViewPager.java:1068)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at android.support.v4.view.ViewPager.populate(ViewPager.java:914)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1436)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at android.view.View.measure(View.java:12863)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at android.view.View.measure(View.java:12863)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:812)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:553)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at android.view.View.measure(View.java:12863)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2256)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at android.view.View.measure(View.java:12863)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1197)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2585)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at android.os.Looper.loop(Looper.java:137)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at android.app.ActivityThread.main(ActivityThread.java:4507)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at java.lang.reflect.Method.invokeNative(Native Method)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at java.lang.reflect.Method.invoke(Method.java:511)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
06-30 06:40:52.485: E/AndroidRuntime(6036):     at dalvik.system.NativeStart.main(Native Method)
  

Новая ошибка после поддержки triyng v7:

 07-01 03:27:04.351: E/AndroidRuntime(2944): FATAL EXCEPTION: main
07-01 03:27:04.351: E/AndroidRuntime(2944): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.bibas.timingsms/com.bibas.timingsms.Main}: java.lang.ClassNotFoundException: Didn't find class "com.bibas.timingsms.Main" on path: /data/app/com.bibas.timingsms-1.apk
07-01 03:27:04.351: E/AndroidRuntime(2944):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2219)
07-01 03:27:04.351: E/AndroidRuntime(2944):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349)
07-01 03:27:04.351: E/AndroidRuntime(2944):     at android.app.ActivityThread.access$700(ActivityThread.java:159)
07-01 03:27:04.351: E/AndroidRuntime(2944):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)
07-01 03:27:04.351: E/AndroidRuntime(2944):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-01 03:27:04.351: E/AndroidRuntime(2944):     at android.os.Looper.loop(Looper.java:137)
07-01 03:27:04.351: E/AndroidRuntime(2944):     at android.app.ActivityThread.main(ActivityThread.java:5419)
07-01 03:27:04.351: E/AndroidRuntime(2944):     at java.lang.reflect.Method.invokeNative(Native Method)
07-01 03:27:04.351: E/AndroidRuntime(2944):     at java.lang.reflect.Method.invoke(Method.java:525)
07-01 03:27:04.351: E/AndroidRuntime(2944):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
07-01 03:27:04.351: E/AndroidRuntime(2944):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
07-01 03:27:04.351: E/AndroidRuntime(2944):     at dalvik.system.NativeStart.main(Native Method)
07-01 03:27:04.351: E/AndroidRuntime(2944): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.bibas.timingsms.Main" on path: /data/app/com.bibas.timingsms-1.apk
07-01 03:27:04.351: E/AndroidRuntime(2944):     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:64)
07-01 03:27:04.351: E/AndroidRuntime(2944):     at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
07-01 03:27:04.351: E/AndroidRuntime(2944):     at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
07-01 03:27:04.351: E/AndroidRuntime(2944):     at android.app.Instrumentation.newActivity(Instrumentation.java:1078)
07-01 03:27:04.351: E/AndroidRuntime(2944):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2210)
07-01 03:27:04.351: E/AndroidRuntime(2944):     ... 11 more
  

Комментарии:

1. Вы должны опубликовать свой код, а затем свой logcat.

2. Пункты меню отображаются как панель действий только после API 2.2. Поэтому, пожалуйста, проверьте, установлена ли на вашем устройстве более высокая версия Android или нет. Возможно, это создает проблему.

Ответ №1:

Если вы используете ActionBarActivity , вы должны использовать поддержку-v7 SearchView:

 <item android:id="@ id/action_search"
    android:title="Search"
    android:icon="@android:drawable/ic_menu_search"
    android:showAsAction="always"
    android:actionViewClass="android.support.v7.widget.SearchView" />
  

Затем вы можете получить его через

 MenuItem searchItem = menu.findItem(R.id.action_search);
mSearchView = (SearchView) MenuItemCompat.getActionView(searchItem);
  

Обязательно измените импорт на SearchView , OnQueryTextListener , и т. Д.

Комментарии:

1. Я не использую ActionBarActivity, я использую FargmentActivity. могу ли я использовать фрагменты с ActionBarActivity?

2. ActionBarActivity расширяется FragmentActivity , так что да. (Обратите внимание, что тема действия должна быть Theme.AppCompat или аналогичной теме для ActionBarActivity работы)

3. хорошо, спасибо, я попробую это, когда здесь будет владелец galaxy 2 🙂 она ушла..

4. Это не работает. мне нужно импортировать библиотеку? я пытаюсь установить ActionBarActivity, и он не может найти импорт, и мое приложение вылетает. я отредактировал свой вопрос с помощью моего нового logCat ошибок

5. Хорошо, у меня проблема!!! мне просто нужно было удалить эту строку: inflater = context.getMenuInflater(); и его работа идеальна