我是Android新手,不知道我应该在哪里编写动作栏按钮的动作列表代码,这样我就不需要在所有活动中编写动作列表代码。
请看下面的图片:我有一个用于操作栏菜单的menu.xml文件,并通过onCreateOptionMenu函数添加到我的一个活动中。当用户点击我的任何操作栏按钮时,我可以通过onOptionItemSelected函数跟踪它。
问题-1:对于所有其他活动,我可以使用相同的menu.xml文件,但是我需要覆盖每个活动的onCreateOptionMenu函数。
问题2:我是否需要在所有活动中编写onOptionItemSelected函数代码?
请建议我更好地解决这些问题。
答案 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);
}