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

时间:2014-11-03 16:51:05

标签: android button android-actionbar

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

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>

3 个答案:

答案 0 :(得分:0)

您不应该使用setOnMenuItemClickListener()

在代码的这一点上,MenuItem已被点击。

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

答案 1 :(得分:0)

您不必在switch语句中设置onClickListeners! 只是把它作为例子

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

答案 2 :(得分:0)

我认为问题来自这里:

item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {

    @Override
    public boolean onMenuItemClick(MenuItem item) {
        Intent intent = new Intent(MainActivity.this, ButtonsActivity.class);
        startActivity(intent);
        return true;
    }
});

您在OnItemClickListener内设置了OnOptionsItemSelected。该过程如下:

  1. 单击项目时:设置OnItemClickListener
  2. 第二次单击您的项目时:将操作写入OnItemClickListener。
  3. 您应该从OnOptionsItemSelected中删除OnItemClickListener以使其正常工作。

    PS:监听器是一个等待动作的对象。第一次设置时:它现在不执行!它等待它收听的动作。因此,当您设置OnItemClickListener时,您必须单击该操作发生的按钮。