2011-02-14 56 views
0

答:使用viewFlipper.getCurrentView()的getId()Android:如何获得布局内的布局ID?

嗨, 我被困在那里我有执行一组基于正在显示在屏幕上的语句位置(已使用IF条件)。布局文件夹只包含一个屏幕(即main.xml)。但在main.xml中有三个绝对布局(01,02 & 03)。我正在使用鳍状肢在这些屏幕上滑动。

之前当我用于在两个屏幕(main.xml和main2.xml)之间切换时,我没有问题。我使用了两个按钮在屏幕之间切换,我在每个按钮中使用了一个标志,并在IF条件中使用相同的标志来执行代码。现在我已经实施了鳍状肢,我无法使用标志。所以我想在IF条件下使用LAYOUT ID。但我需要知道如何检查java编码中的布局ID。有人可以帮我吗?

对于防爆:

if(findViewById(R.id.AbsoluteLayout01)==true) 
{ 
execute 
} 
else if(findViewById(R.id.AbsoluteLayout02)==true) 
{ 
execute #2 
} 

(上面的代码抛出了 “不兼容的操作数类型的View和布尔” 的错误)

所以,我想

if(findViewById()==v1) //v1 is the object for AbsoluteLayout01 
{ 
execute 
} 
else if(findViewById()==v2) //v2 is the object for AbsoluteLayout02 
{ 
execute #2 
} 

(以上代码抛出“类型Activity中的方法findViewById(int)不适用于参数()”错误)

+0

你好,它不是很清楚你想要什么,你可以发布你正在使用的代码。 – 2011-02-14 22:00:57

回答

3

最简单的方法,你可以叫ViewFlipper.getDisplayedChild(),只是比较基础上的指数(0,1,2)。如果绝对有必要通过id进行比较,你也可以这样做:

ViewFlipper vf = //whatever assignment 
switch(vf.getCurrentView().getId()) { 
    case R.id.AbsoluteLayout1: 
     //do work 
} 
0

在你的第一个代码块,你可以尝试

if (findViewById(R.id.absoluteLayout01) != null) { 
    .... 
} 

为findViewById要么返回一个视图,如果找到,则返回null。

至于如何找到布局ID,你只是试图R.layout。(...)?这将工作,如果他们都是单独的XML文件,因为它返回整个文件的唯一编号,而不是文件内的视图组。除非你重载==操作符

+0

@ f20k - 您提供的代码可能不会引发错误,但它已经没有用了。由于给定的代码,检查AbsoluteLayout01与该AbosluteLayout01的对象V1的。两者都是一样的,所以这些语句将一直执行。@Steve H - 我试过这个,但就像上面的f20k的逻辑一样,即使这一切都是真的。 @Lucas S. - 就像我说过的,我需要获取由鳍状肢显示的绝对布局的ID。顺便说一句,谢谢大家帮助我。 – emmarbe 2011-02-14 22:38:24

2

使用==将无法查看工作之间....

尝试.equals()代替。

if(findViewById(R.id.AbsoluteLayout01).equals(v1)) 

其中v1是视图。

+2

“_unless你重写==运算符......_” - 祝你好运,试图在Java中做到这一点。 – 2011-02-14 23:11:22

+0

@Ted Hopp。非常有趣,我没有意识到运算符重载在Java中并不常见(我从未尝试过)。每天学习新东西。然而,真的让我很难看到人们在没有阅读错误信息的情况下尝试对所有内容进行操作...... – f20k 2011-02-15 00:46:10