项目按钮需要两次点击来启动新的活动

问题描述:

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

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> 
+0

笏你想干什么?点击'add_button'然后你的活动必须启动? – Panther 2014-11-03 16:56:57

你不应该使用setOnMenuItemClickListener()

此时在您的代码中,MenuItem已被点击。

  • onCreateOptionsMenu()创建菜单
  • onOptionsItemSelected()反应的的MenuItem点击

您不必设置onClickListeners switch语句! 只是把这个例如

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; 
    } 
}); 

要设置一个OnItemClickListenerOnOptionsItemSelected内。这一过程将会是如下:

  1. 当你的项目被点击:设置OnItemClickListener
  2. 当你的项目被点击一次:让写在OnItemClickListener的动作。

您应该从OnOptionsItemSelected中删除OnItemClickListener以使其正常工作。

PS:一个Listener是一个等待动作的对象。当你第一次设置一个:它现在不执行!它等待它收听的动作。所以当你设置你的OnItemClickListener时,你必须点击动作事件的按钮。