Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 项目按钮需要单击两次才能启动新活动_Android_Button_Android Actionbar - Fatal编程技术网

Android 项目按钮需要单击两次才能启动新活动

Android 项目按钮需要单击两次才能启动新活动,android,button,android-actionbar,Android,Button,Android Actionbar,我有一个带有操作栏的主要活动,操作栏上有经典的“溢出”按钮和布局顶部的其他项目按钮。我遇到的问题是,我需要单击两次项目按钮来启动以下活动。我不想发生这种情况,我只想“点击一下”启动一项活动。这是我的代码(对不起,如果我没有正确发布)。我怎样才能修好它?多谢各位 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCr

我有一个带有操作栏的主要活动,操作栏上有经典的“溢出”按钮和布局顶部的其他项目按钮。我遇到的问题是,我需要单击两次项目按钮来启动以下活动。我不想发生这种情况,我只想“点击一下”启动一项活动。这是我的代码(对不起,如果我没有正确发布)。我怎样才能修好它?多谢各位

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

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

//Aggiungere listener per tutti gli item! (estrarre i listener)
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();

    switch (id) {
        case R.id.action_settings:
            //TODO
            return true;
        case R.id.filters:
            item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {

            @Override
            public boolean onMenuItemClick(MenuItem item) {
                Intent intent = new Intent(MainActivity.this, FiltersActivity.class);
                startActivity(intent);
                return true;
            }
        });
        return true;
        case R.id.action_new:
            return true;
        case R.id.add_button:
            item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {

            @Override
            public boolean onMenuItemClick(MenuItem item) {
                Intent intent = new Intent(MainActivity.this, ButtonsActivity.class);
                startActivity(intent);
                return true;
            }
        });
        return true;
        case R.id.add_project:
            //TODO
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }

}
和XML文件:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.example.logger.MainActivity" >

    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="@string/action_settings"/>

    <item 
        android:id="@+id/filters"
        android:title="@string/filter"
        android:showAsAction="never"/>

    <item 
        android:id="@+id/action_new"
        android:showAsAction="ifRoom"
        android:icon="@drawable/ic_action_new"
        android:visible="true"
        android:title="@string/action_new">

        <menu>

           <item 
               android:id="@+id/add_project"
               android:showAsAction="never"
               android:title="@string/add_project"/>

           <item 
               android:id="@+id/add_button"
               android:showAsAction="never"
               android:title="@string/add_button"/>

       </menu>

    </item>

</menu>

您不应该使用
设置菜单项ClickListener()

此时,代码中的
菜单项已被单击

  • onCreateOptions菜单()
    创建菜单
  • onOptionsItemSelected()
    MenuItem
    单击

    • 您不必在switch语句中设置onClickListeners! 举个例子

      case R.id.add_button: {
                  Intent intent = new Intent(MainActivity.this, ButtonsActivity.class);
                  startActivity(intent);
                  return true;
      }
      

      我认为问题来自这里:

      item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
      
          @Override
          public boolean onMenuItemClick(MenuItem item) {
              Intent intent = new Intent(MainActivity.this, ButtonsActivity.class);
              startActivity(intent);
              return true;
          }
      });
      
      您正在
      OnOptionsItemSelected
      内设置一个
      OnItemClickListener
      。过程如下:

    • 单击项目时:设置McClickListener
    • 第二次单击项目时:将操作写入McClickListener
    • 您应该从OnOptions ItemSelected中删除OnItemClickListener,以使其正常工作


      PS:侦听器是一个等待操作的对象。当您第一次设置时:它不会立即执行!它等待它所听到的动作。因此,当您设置您的McClickListener时,您必须单击操作发生的按钮。

      您想做什么?单击“添加”按钮,然后必须启动您的活动?