如何处理动作栏按钮监听器

时间:2013-04-25 20:20:34

标签: android

我是Android新手,不知道我应该在哪里编写动作栏按钮的动作列表代码,这样我就不需要在所有活动中编写动作列表代码。

请看下面的图片:我有一个用于操作栏菜单的menu.xml文件,并通过onCreateOptionMenu函数添加到我的一个活动中。当用户点击我的任何操作栏按钮时,我可以通过onOptionItemSelected函数跟踪它。

问题-1:对于所有其他活动,我可以使用相同的menu.xml文件,但是我需要覆盖每个活动的onCreateOptionMenu函数。

问题2:我是否需要在所有活动中编写onOptionItemSelected函数代码?

请建议我更好地解决这些问题。

enter image description here

2 个答案:

答案 0 :(得分:1)

  

问题-1:对于所有其他活动,我可以使用相同的menu.xml文件,但我是否需要覆盖每个活动的onCreateOptionMenu函数。

     

问题2:我是否需要在所有活动中编写onOptionItemSelected功能代码?

您可以创建“基础”Activity并实现其中的方法。然后,您需要做的就是确保所有其他Activities扩展“基数”Activity

示例(注意我使用ActionBarSherlock,因此我的'base'Activity最初扩展ShelockFragmentActivity - 在您的情况下可能不一样但是这给出了一个示例... ...

public class MyBaseFragmentActivity extends SherlockFragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

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

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        super.onOptionsItemSelected(item);

        // Handle menu selection here
    }
}

现在任何扩展“base”Activity的{​​{1}}都会自动继承“基础”类的菜单创建和项目选择方法。

Activity

答案 1 :(得分:0)

  

问题-1:对于所有其他活动,我可以使用相同的menu.xml文件,但是我需要覆盖每个活动的onCreateOptionMenu函数。

是的,只需添加代码即可处理switch语句中的菜单选项。

  

问题2:我是否需要在所有活动中编写onOptionItemSelected函数代码?

是的,对于使用操作栏的每个活动,您需要覆盖onOptionItemSelected函数并添加自定义代码。

例如:

    @Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.menu_watchlist:
            Intent intent = new Intent(HomeActivity.this, WatchlistActivity.class);
            intent.putExtra("username", currentUser.getUsername());
            startActivityForResult(intent, 0);
            return true;
        case R.id.menu_history:
            Intent intent2 = new Intent(HomeActivity.this, HistoryActivity.class);
            intent2.putExtra("username", currentUser.getUsername());
            startActivityForResult(intent2, 0);
            return true;
        case R.id.menu_scores:
            // Scores only available with Facebook login
            if (facebookLogin)
            {
                Intent scoreIntent = new Intent(HomeActivity.this, ScoresActivity.class);
                scoreIntent.putExtra("username",  currentUser.getUsername());
                scoreIntent.putExtra("accessToken",  accessToken);
                Session session = Session.getActiveSession();
                scoreIntent.putExtra("session", session);
                startActivityForResult(scoreIntent, 0);
            }
            else
                Toast.makeText(getApplicationContext(), "Please login to Facebook to use this feature.", Toast.LENGTH_SHORT).show();
            return true;
        case R.id.menu_settings:
            Intent intent3 = new Intent(HomeActivity.this, SettingsActivity.class);
            intent3.putExtra("username", currentUser.getUsername());
            startActivityForResult(intent3, 0);
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }