Android:Actionbar项onclick

Android:Actionbar项onclick,android,android-actionbar,Android,Android Actionbar,1-若要将搜索项目添加到我的中,我的项目如下所示: <item android:id="@+id/search" android:icon="@drawable/ic_action_search" android:title="@string/Search" android:showAsAction="ifRoom" /> //ONOPTIONE已选定 public boolean OnOptionItemS

1-若要将搜索项目添加到我的中,我的项目如下所示:

<item 

      android:id="@+id/search"
      android:icon="@drawable/ic_action_search" 
      android:title="@string/Search"
      android:showAsAction="ifRoom"    
      />
//ONOPTIONE已选定

public boolean OnOptionItemSelected(MenuItem item)
{

    switch(item.getItemId())
    {

      case R.id.search:
          action_search();
          return true;  

      default:
         return super.onOptionsItemSelected(item);


    }   
}
//搜查行动

public void action_search()
    {

        System.out.println("Heeeeey");

    }
,但是如果我添加这个
android:onClick=“action\u search”
它会给我这些错误

03-20 07:40:12.622: E/Trace(1277): error opening trace file: No such file or directory (2)
03-20 07:40:13.002: E/AndroidRuntime(1277): FATAL EXCEPTION: main
03-20 07:40:13.002: E/AndroidRuntime(1277): android.view.InflateException: Couldn't resolve menu item onClick handler action_search in class com.example.lesson1.MainActivity
03-20 07:40:13.002: E/AndroidRuntime(1277):     at android.view.MenuInflater$InflatedOnMenuItemClickListener.<init>(MenuInflater.java:217)
03-20 07:40:13.002: E/AndroidRuntime(1277):     at android.view.MenuInflater$MenuState.setItem(MenuInflater.java:417)
03-20 07:40:13.002: E/AndroidRuntime(1277):     at android.view.MenuInflater$MenuState.addItem(MenuInflater.java:451)
03-20 07:40:13.002: E/AndroidRuntime(1277):     at android.view.MenuInflater.parseMenu(MenuInflater.java:188)
03-20 07:40:13.002: E/AndroidRuntime(1277):     at android.view.MenuInflater.inflate(MenuInflater.java:110)
03-20 07:40:13.002: E/AndroidRuntime(1277):     at com.example.lesson1.MainActivity.onCreateOptionsMenu(MainActivity.java:30)
03-20 07:40:13.002: E/AndroidRuntime(1277):     at android.app.Activity.onCreatePanelMenu(Activity.java:2476)
03-20 07:40:13.002: E/AndroidRuntime(1277):     at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:393)
03-20 07:40:13.002: E/AndroidRuntime(1277):     at com.android.internal.policy.impl.PhoneWindow.invalidatePanelMenu(PhoneWindow.java:747)
03-20 07:40:13.002: E/AndroidRuntime(1277):     at com.android.internal.policy.impl.PhoneWindow$1.run(PhoneWindow.java:2913)
03-20 07:40:13.002: E/AndroidRuntime(1277):     at android.os.Handler.handleCallback(Handler.java:615)
03-20 07:40:13.002: E/AndroidRuntime(1277):     at android.os.Handler.dispatchMessage(Handler.java:92)
03-20 07:40:13.002: E/AndroidRuntime(1277):     at android.os.Looper.loop(Looper.java:137)
03-20 07:40:13.002: E/AndroidRuntime(1277):     at android.app.ActivityThread.main(ActivityThread.java:4745)
03-20 07:40:13.002: E/AndroidRuntime(1277):     at java.lang.reflect.Method.invokeNative(Native Method)
03-20 07:40:13.002: E/AndroidRuntime(1277):     at java.lang.reflect.Method.invoke(Method.java:511)
03-20 07:40:13.002: E/AndroidRuntime(1277):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
03-20 07:40:13.002: E/AndroidRuntime(1277):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
03-20 07:40:13.002: E/AndroidRuntime(1277):     at dalvik.system.NativeStart.main(Native Method)
03-20 07:40:13.002: E/AndroidRuntime(1277): Caused by: java.lang.NoSuchMethodException: action_search [interface android.view.MenuItem]
03-20 07:40:13.002: E/AndroidRuntime(1277):     at java.lang.Class.getConstructorOrMethod(Class.java:460)
03-20 07:40:13.002: E/AndroidRuntime(1277):     at java.lang.Class.getMethod(Class.java:915)
03-20 07:40:13.002: E/AndroidRuntime(1277):     at android.view.MenuInflater$InflatedOnMenuItemClickListener.<init>(MenuInflater.java:215)
03-20 07:40:13.002: E/AndroidRuntime(1277):     ... 18 more
03-20 07:40:12.622:E/Trace(1277):打开跟踪文件时出错:没有这样的文件或目录(2)
03-20 07:40:13.002:E/AndroidRuntime(1277):致命异常:主
03-20 07:40:13.002:E/AndroidRuntime(1277):android.view.InflateException:在com.example.lesson1.MainActivity类中单击处理程序操作搜索时无法解析菜单项
03-20 07:40:13.002:E/AndroidRuntime(1277):在android.view.MenuInflater$InflatedOnMenuItemClickListener上。(MenuInflater.java:217)
03-20 07:40:13.002:E/AndroidRuntime(1277):在android.view.MenuInflater$MenuState.setItem(MenuInflater.java:417)
03-20 07:40:13.002:E/AndroidRuntime(1277):在android.view.MenuInflater$MenuState.addItem(MenuInflater.java:451)
03-20 07:40:13.002:E/AndroidRuntime(1277):在android.view.MenuInflater.parseMenu(MenuInflater.java:188)
03-20 07:40:13.002:E/AndroidRuntime(1277):在android.view.MenuInflater.inflate(MenuInflater.java:110)
03-20 07:40:13.002:E/AndroidRuntime(1277):位于com.example.lesson1.MainActivity.onCreateOptions菜单(MainActivity.java:30)
03-20 07:40:13.002:E/AndroidRuntime(1277):位于android.app.Activity.onCreatePanelMenu(Activity.java:2476)
03-20 07:40:13.002:E/AndroidRuntime(1277):在com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:393)
03-20 07:40:13.002:E/AndroidRuntime(1277):位于com.android.internal.policy.impl.PhoneWindow.invalidatePanelMenu(PhoneWindow.java:747)
03-20 07:40:13.002:E/AndroidRuntime(1277):在com.android.internal.policy.impl.PhoneWindow$1.run(PhoneWindow.java:2913)
03-20 07:40:13.002:E/AndroidRuntime(1277):在android.os.Handler.handleCallback(Handler.java:615)上
03-20 07:40:13.002:E/AndroidRuntime(1277):在android.os.Handler.dispatchMessage(Handler.java:92)上
03-20 07:40:13.002:E/AndroidRuntime(1277):在android.os.Looper.loop(Looper.java:137)上
03-20 07:40:13.002:E/AndroidRuntime(1277):位于android.app.ActivityThread.main(ActivityThread.java:4745)
03-20 07:40:13.002:E/AndroidRuntime(1277):位于java.lang.reflect.Method.Invokenactive(本机方法)
03-20 07:40:13.002:E/AndroidRuntime(1277):位于java.lang.reflect.Method.invoke(Method.java:511)
03-20 07:40:13.002:E/AndroidRuntime(1277):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
03-20 07:40:13.002:E/AndroidRuntime(1277):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
03-20 07:40:13.002:E/AndroidRuntime(1277):在dalvik.system.NativeStart.main(本机方法)
03-20 07:40:13.002:E/AndroidRuntime(1277):由以下原因引起:java.lang.NoSuchMethodException:action_search[界面android.view.MenuItem]
03-20 07:40:13.002:E/AndroidRuntime(1277):在java.lang.Class.getConstructorMethod(Class.java:460)中
03-20 07:40:13.002:E/AndroidRuntime(1277):在java.lang.Class.getMethod(Class.java:915)中
03-20 07:40:13.002:E/AndroidRuntime(1277):在android.view.MenuInflater$InflatedOnMenuItemClickListener上。(MenuInflater.java:215)
03-20 07:40:13.002:E/AndroidRuntime(1277):。。。还有18个

2-什么是android:showAsAction=“ifRoom”?它在干什么

活动中处理操作栏单击的方法如下所示:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    final int id = item.getItemId();
    if (R.id.search == id) {
        // do something and maybe return true...
    }
    return super.onOptionsItemSelected(item);
}

ifRoom
标记意味着如果操作栏中的项目没有足够的空间,它将出现在操作溢出中。

操作栏菜单项是使用

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu, menu);

    return true;
}
然后使用

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {

    case R.id.search:
        //TODO do your thing.
        return true;
    default:
        return false;
    }
}
还有一件事,
ifRoom表示如果有空间,则项目显示为图标。如果您只有一件物品,则始终有一个房间。如果没有空间,该项目将显示在溢出菜单中

您需要按照上面提到的完整教程进行操作

ifRoom标记意味着:只有在操作栏上有可用空间时,指定的项目才可见


在本系列中,不要使用onClick侦听器,onOptionItemSelected将是完美的。所有这些都记录在上述链接中。

1。您不应该以这种方式将onclick添加到操作菜单项中。相反,您必须覆盖选项ItemSelected,如下所示:

@Override
public boolean onOptionsItemSelected(MenuItem item){
    switch(item.getItemId()){
    case R.id.search:
        // your action goes here
        return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}
并将布局充气到ActionBar中,如下所示:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.mymenu, menu);
    return true;
}
2.
ifRoom
表示如果有空间,将动作项放在动作栏上。然而,空间是由以下因素决定的:小于动作栏水平空间宽度的一半,并且计数小于动作项目的最大数量——杰克·沃顿

  • 在您的
    活动中
    单击菜单项将在此处处理。
  • @凌驾

     public boolean onOptionsItemSelected(MenuItem item) {
     // Handle presses on the action bar items
    
           switch (item.getItemId()) {
               case R.id.search:
               //do your work here
               return true;    
                }
            }
    
    二,。
    android:showAsAction

    关键词。此项何时以及如何在操作栏中显示为操作项。只有当活动包含操作栏时,菜单项才能显示为操作项

    ifRoom
    仅当有空间放置此项目时,才将其放置在操作栏中


    您可以获得详细信息

    如果您使用的是android 11版及以上版本,您可以在您的活动中使用android searchview小部件,如下所示

    main.xml

     <menu xmlns:android="http://schemas.android.com/apk/res/android" >
    
    <item
        android:id="@+id/action_websearch"
        android:actionViewClass="android.widget.SearchView"
        android:icon="@android:drawable/ic_menu_search"
        android:showAsAction="always"
        android:title="@string/search_title"/>
      </menu>
    

    请发布您的oncreateoptionmeu()实现您的
    活动
    应包含此方法
    公共无效操作搜索(MenuItem MenuItem){}
    。@GopalRao我编辑问题plz reviewit@MSS我编辑了问题plz review It您想使用searchview小部件还是自定义小部件??请张贴整个实施,以便我将作出合理的更正。现在只需运行它并检查它是否真的有效静止不动。我再次编辑了我的问题,请再看一看,到底是什么不起作用?你更新了吗
     <menu xmlns:android="http://schemas.android.com/apk/res/android" >
    
    <item
        android:id="@+id/action_websearch"
        android:actionViewClass="android.widget.SearchView"
        android:icon="@android:drawable/ic_menu_search"
        android:showAsAction="always"
        android:title="@string/search_title"/>
      </menu>
    
        @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    
        // MenuInflater inflater = getMenuInflater();
        // inflater.inflate(R.menu.main, menu);
    
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main, menu);
    
        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        searchView = (SearchView) menu.findItem(R.id.action_websearch)
                .getActionView();
    
    }