1

我是 android 新手,不知道应该在哪里为操作栏按钮编写 actionlistner 代码,这样我就不需要在所有活动中编写 action listner 代码。

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

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

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

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

在此处输入图像描述

4

2 回答 2

1

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

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

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

示例(注意我使用 ActionBarSherlock 所以我的“基础”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
    }
}

现在,任何Activity扩展“base”的Activity东西都将自动继承“base”类的菜单创建和项目选择方法。

public class ActivityA extends MyBaseFragmentActivity {

    // No need to create the menu or handle item selection

}
于 2013-04-25T20:45:12.097 回答
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);
    }
于 2013-04-25T20:27:03.730 回答