【问题标题】:How to set OnClickListener by Navigation menu item如何通过导航菜单项设置 OnClickListener
【发布时间】:2019-09-03 18:24:57
【问题描述】:

我想在单击该菜单时在菜单项上设置 On Click Listener,然后直接显示对话框或任何其他活动,但是如何...?

Button btn1 = (Button) findViewById(R.id.button1);
    btn1.setOnClickListener(new View.OnClickListener() {
      @Override
        public void onClick(View v) {
            UpdateChecker.checkForDialog(Home.this);
        }
    });

【问题讨论】:

标签: android


【解决方案1】:

这将起作用:

在你的 menu.xml 中:

<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
            android:id="@+id/rate_us"
            android:title="Rate us"/>
</menu>

在主要活动中:

class MainActivity : AppCompatActivity(){


 override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
 }


 override fun onCreateOptionsMenu(menu: Menu?): Boolean {
            menuInflater.inflate(R.menu.settings, menu);
            return super.onCreateOptionsMenu(menu) 
 }
 override fun onOptionsItemSelected(item: MenuItem): Boolean {
            val id = item.itemId
            when (id) {
                R.id.rate_us -> {
                      ///YOUR CODE 
                      //
                  return true 
                }
              else -> return 
                  super.onOptionsItemSelected(item) 
              } 
  }


 }

【讨论】:

    【解决方案2】:

    您创建您的菜单选项:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.your_menu, menu);
        return true;
    }
    

    然后您将以下内容用于菜单项上的点击事件:

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
    
        switch (item.getItemId()) {
        case R.id.button1:
            UpdateChecker.checkForDialog(Home.this);
            return true;
        case R.id.option_two:
            //do something else
            return true;
    ...
        default:
            return super.onOptionsItemSelected(item);
        }
    }
    

    然后从developers website 中选择适合您风格的对话框 例如,标准警报对话框是:

    new AlertDialog.Builder(context)
        .setTitle("Your Title here")
        .setMessage("Your message here")
        .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) { 
                // Do something
            }
         })
        .setNegativeButton(android.R.string.no, null)
        .setIcon(android.R.drawable.your_custom_drawbale)
        .show();
    

    【讨论】:

    • inside .. case R.id.option_one... 我想将点击监听器与“UpdateChecker.checkForDialog(Home.this);”一起使用这条线来自我的问题。如何
    • @Tanim 更新了我的答案。您不需要为每个按钮设置单独的单击侦听器。 onOptionsItemSelected() 将处理所有的点击事件
    【解决方案3】:

    在你的菜单xml中添加这个

    <item
    android:onClick="clickME">
    </item>
    

    在您的活动中创建一个空白

    private void clickME(MenuItem menuItem){
    
    }
    

    【讨论】:

      【解决方案4】:

      首先你需要在你的activity中实现NavigationView.OnNavigationItemSelectedListener

      然后,在 onCreate() 方法中你需要初始化导航菜单:

      navigationView = (NavigationView) findViewById(R.id.nav_view);
      navigationView.setNavigationItemSelectedListener(this);
      

      你还需要像这样@overwrite onNavigationItemSelected(MenuItem item)

      @overwrite
      public boolean onNavigationItemSelected(MenuItem item) {
              // Handle navigation view item clicks here.
              int id = item.getItemId();
      
              if (id == R.id.nav_item_1) {
                  //do whatever you want
              } else if (id == R.id.nav_item_2) {
                  //do whatever you want
              } else if (id == R.id.nav_item_3) {
                 //do whatever you want
              }
              DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
              drawer.closeDrawer(GravityCompat.START);
              return true;
      }
      

      【讨论】:

        【解决方案5】:
         bottomNavig.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
                @Override
                public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
                    if (menuItem.getItemId() == R.id.wallet) {
        
                        menuItem.setChecked(true);
                    } else if (menuItem.getItemId() == R.id.home) {
        
                        menuItem.setChecked(true);
                    }
                    return false;
                }
            });
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-03
          • 2021-06-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多