Java 如何在工具栏中为图标设置OnClick事件

Java 如何在工具栏中为图标设置OnClick事件,java,android,Java,Android,我刚刚创建了一个工具栏,上面有这样的图标 我希望这个黑色图标可以点击 这是我的menu.xml文件 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="

我刚刚创建了一个工具栏,上面有这样的图标

我希望这个黑色图标可以点击 这是我的menu.xml文件

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item android:id="@+id/searchicon"
        android:icon="@drawable/search"
        android:title="@string/search"
        app:showAsAction="always"/>

    <item android:id="@+id/listicon"
        android:icon="@drawable/list_view"
        android:title="@string/listview"
        app:showAsAction="always"/>

    <item android:id="@+id/gridicon"
        android:icon="@drawable/table_grid"
        android:title="@string/gridview"
        app:showAsAction="always"/>
</menu>

这是我的活动,它包含一个带有图标的工具栏

package abtech.waiteriano.com.waitrer;

import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.Toast;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import abtech.waiteriano.com.waitrer.adapters.CustomMenuGridViewAdapter;
import abtech.waiteriano.com.waitrer.connection_class.ConnectionClass;
import abtech.waiteriano.com.waitrer.getters_and_setters.MenuItem;

public class MenuActivity extends AppCompatActivity {
    private android.support.v7.widget.Toolbar toolbar;
    private ArrayList<String> category ;
    GridView menuGridView;

    static ArrayList<MenuItem> menuGridArray = new ArrayList<MenuItem>();
    CustomMenuGridViewAdapter customMenuGridViewAdapter;

    ImageView listIcon, gridIcon;

    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_menu);

        menuGridView = (GridView) findViewById(R.id.menuGridView);
        customMenuGridViewAdapter = new CustomMenuGridViewAdapter(MenuActivity.this, R.layout.menu_row_grid, menuGridArray);
        menuGridView.setAdapter(customMenuGridViewAdapter);
        String menugridSTR = "Select ID,Code,Name,Name2 From Presets Where Active = 1 And Rest_ID_Active = 1 AND OutLet_ID_Active = 1 ORDER BY Code";
        ResultSet rs = ConnectionClass.Ret_RS(menugridSTR);
        menuGridArray.clear();
        try {
            while (rs.next()) {
                menuGridArray.add(new MenuItem(rs.getString("Name")));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

        listIcon = (ImageView) findViewById(R.id.listicon);
        gridIcon = (ImageView) findViewById(R.id.gridicon);
        category = new ArrayList<String>() ;
        String str = "Select ID,Code,Name,Name2 From Presets Where Active = 1 And Rest_ID_Active = 1 AND OutLet_ID_Active = 1 ORDER BY Code";
        rs = ConnectionClass.Ret_RS(str);
        try {
            while (rs.next()) {
                category.add(rs.getString("Name"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayShowTitleEnabled(false);
        Spinner navigationSpinner = new Spinner(getSupportActionBar().getThemedContext());
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, category);
        navigationSpinner.setAdapter(adapter);
        toolbar.addView(navigationSpinner, 0);

        navigationSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(MenuActivity.this,
                        "you selected: " + category.get(position),
                        Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.iconmenu, menu);
        return true;
    }
}
package abtech.waiteriano.com.waiter;
导入android.os.Build;
导入android.os.Bundle;
导入android.support.annotation.RequiresApi;
导入android.support.v7.app.AppActivity;
导入android.support.v7.widget.Toolbar;
导入android.view.Menu;
导入android.view.MenuInflater;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.ArrayAdapter;
导入android.widget.GridView;
导入android.widget.ImageView;
导入android.widget.Spinner;
导入android.widget.Toast;
导入java.sql.ResultSet;
导入java.sql.SQLException;
导入java.util.ArrayList;
导入abtech.waiteriano.com.waiter.adapters.CustomMenuGridViewAdapter;
导入abtech.waiteriano.com.waiter.connection_class.ConnectionClass;
导入abtech.waiteriano.com.waiter.getters_和_setters.MenuItem;
公共类菜单活动扩展了AppCompatActivity{
私有android.support.v7.widget.Toolbar工具栏;
私有数组列表类别;
GridView菜单GridView;
静态ArrayList menuGridArray=新ArrayList();
CustomMenuGridViewAdapter CustomMenuGridViewAdapter;
ImageView列表图标、gridIcon;
@RequiresApi(api=Build.VERSION\u code.LOLLIPOP)
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_菜单);
menuGridView=(GridView)findViewById(R.id.menuGridView);
customMenuGridViewAdapter=新的customMenuGridViewAdapter(MenuActivity.this,R.layout.menu\u row\u grid,menuGridArray);
setAdapter(customMenuGridViewAdapter);
String menugridSTR=“从预设中选择ID、代码、名称2,其中Active=1,Rest\u ID\u Active=1,OutLet\u ID\u Active=1,按代码排序”;
结果集rs=ConnectionClass.Ret_rs(menugridSTR);
menuGridArray.clear();
试一试{
while(rs.next()){
添加(新的MenuItem(rs.getString(“Name”));
}
}捕获(SQLE异常){
e、 printStackTrace();
}
listIcon=(ImageView)findViewById(R.id.listIcon);
gridIcon=(ImageView)findViewById(R.id.gridIcon);
类别=新的ArrayList();
String str=“从预设中选择ID、代码、名称2,其中Active=1,Rest\u ID\u Active=1,OutLet\u ID\u Active=1,按代码排序”;
rs=连接类Ret_rs(str);
试一试{
while(rs.next()){
添加(rs.getString(“名称”);
}
}捕获(SQLE异常){
e、 printStackTrace();
}
toolbar=(toolbar)findviewbyd(R.id.toolbar);
设置支持操作栏(工具栏);
getSupportActionBar().setDisplayShowTitleEnabled(false);
微调器navigationSpinner=新微调器(getSupportActionBar().getThemedContext());
ArrayAdapter=新的ArrayAdapter(这是android.R.layout.simple\u微调器项目,类别);
navigationSpinner.setAdapter(适配器);
工具栏.addView(navigationSpinner,0);
navigationSpinner.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
Toast.makeText(MenuActivity.this,
“您选择:”+类别。获取(位置),
吐司。长度(短)。show();
}
@凌驾
未选择公共无效(AdapterView父级){
}
});
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
MenuInflater充气机=getMenuInflater();
充气器。充气(R.menu.iconmenu,menu);
返回true;
}
}
我应该使用OnCreate选项菜单吗?如果是,那么我该如何使用它,
抱歉,如果有任何不清楚的地方,如果有任何观察,请添加注释来处理
菜单中发生的点击事件,您必须覆盖
活动的
选项项选择方法,如下所示:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId()) {
        case R.id.searchicon: 
            // ...
            return true;
        case R.id.listicon:
            // ...
            return true;
        case R.id.gridicon:
            // ...
            return true;
    }

    return super.onOptionsItemSelected(item);
}

覆盖方法
onOptionsItemSelected

像这样:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle item selection
    switch (item.getItemId()) {
        case R.id.searchicon:
           //do something
            return true;
        case R.id.listicon:
              //do something
            return true;
        case R.id.gridicon:
              //do something
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

阅读更多内容

只需覆盖一个方法:

 @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_reset:
                // your action
                break;
        }
        return super.onOptionsItemSelected(item);
    }

您只需
覆盖
onOptionsItemSelected