2011-03-14 49 views
1

我正在为Android操作系统创建一个应用程序,并且我遇到了一个问题的绊脚石。这是我想要做的:Android/java - 需要找到当前布局的ID - 如何?

我目前正在捕获“后退”按钮事件就好,但我需要它的行为略有不同,取决于用户正在查看的当前布局。我使用了四种布局,如果用户在布局1,2或3上,我想要“后退”将它们放到布局1;但如果他们在布局4上,我希望他们回到布局3。

问题是,我不能为我的生活弄清楚将返回CURRENT布局的id的代码。我相信这是一个非常简单的问题,所以我希望有人会有一个快速的解决方案。


感谢您的三分球 - 对我有麻烦getCurrentFocus某种原因()的工作,虽然...可能是由于程序的Java我自己的无能。

我打破它分为以下几个:

View thisView = getCurrentFocus(); 
if (thisView != null){ 
int viewID = thisView.getId(); 
toastLong(Integer.toString(viewID)); 
} else { 
toastLong("thisView is null."); 
} 

现在的问题是,thisView总是空 - 它不返回任何值。我试图把在我使用到位myActivity的活动名称(使它:

View thisView = myActivityName.getCurrentFocus(); 

但IDE给我下面的错误,并不会编译:

不能使静态参考到

从类型活动的非静态方法getCurrentFocus。我显然失去了一些东西,我的假设是,这是一个非常基本的东西,我失踪。任何指针?

+0

每次调用'setContentView'时,为什么不自己在一个变量中跟踪它? – EboMike 2011-03-14 19:27:24

+0

myActivity.getCurrentFocus()。getId() – 2011-03-14 19:27:29

+0

那么......或那个。 – EboMike 2011-03-14 19:27:53

回答

0

您可以使用ViewFlipper保持你的布局和进出口借助简单的状态机来控制转换。 另一种选择可能是为每个布局创建一个单独的Activity--如果没有关于您的应用正在做什么的确切知识,很难说清楚。

3

我也有这个问题,并找到了一个非常简单的解决方案。虽然这是一个老问题,但我会在这里为寻求帮助解决这个问题的人发布。

在你的类只需要创建一个整数属性:

int layoutId; 

然后重写的setContentView方法和参数保存ID:

@Override 
public void setContentView(int layoutResID) { 
    this.layoutId = layoutResID; 
    super.setContentView(layoutResID); 
} 

很简单的一招!