我正在处理我的第一个Android应用,我有一个问题我无法排序。我检查了堆栈溢出但我找不到解决方案。
我有一个菜单,在选择菜单项时显示4种不同的活动。 我还有一个管理菜单的课程:
public class TabMenuManager {
final Context context;
public TabMenuManager(Context context) {
this.context = context;
}
public boolean handleTabMenuAction(int item) {
Log.d("Toolstrea", "TAB MENU HANDLED: " + item);
switch (item) {
case R.id.action_home:
handleHomeAction();
return true;
case R.id.action_reorder:
handleReOrderAction();
return true;
//.....
}
private void handleReOrderAction() {
if (this.context.getApplicationContext() instanceof ReOrderActivity) {
Log.d("Toolstream", "REORDER CLASSES THE SAME");
Intent reOrderIntent = new Intent(this.context, ReOrderActivity.class);
reOrderIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
this.context.startActivity(reOrderIntent);
}
else
Log.d("Toolstream", "REORDER CLASSES NOT THE SAME");
}
private void handleHomeAction() {
// Simmilar as one above
}
}
在所有活动中,我都会显示我刚刚调用的菜单:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle presses on the action bar items
TabMenuManager tmm = new TabMenuManager(getApplicationContext());
boolean success = tmm.handleTabMenuAction(item.getItemId());
if (!success) {
return super.onOptionsItemSelected(item);
}
return success;
}
这个课程只是简单的展示活动,但我想确保它不会呈现与当前活动相同的活动。 在这个例子中,我使用:
this.context.getApplicationContext() instance of ReOrderActivity
但我也试过
this.context.getClass() == HomeActivity.class
始终记录活动不同。 它导致的问题是,如果我在HomeActivity中,我可以在我的菜单中按Home,而另一个HomeActivity实例将添加到堆栈中等等。
如何确保我只提供一个活动实例? 我有更好的方法吗?
非常感谢。
答案 0 :(得分:2)
在您的代码中,this.context.getApplicationContext() instance of ReOrderActivity
永远不会成真。您应该将其更改为:this.context instance of ReOrderActivity
您还需要更改onOptionsItemSelected中创建TabMenuManager的方式。将其更改为:TabMenuManager tmm = new TabMenuManager(this);