【问题标题】:Android: How to get the id of a layout inside a flipper?Android:如何获取脚蹼内布局的 ID?
【发布时间】:2011-02-14 21:56:20
【问题描述】:

Ans:使用 viewFlipper.getCurrentView().getId()

嗨, 我被困在一个位置,我必须根据正在显示的屏幕执行一组语句(必须使用 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
}

(以上代码抛出“Incompatible operand types View and boolean”错误)

所以我尝试了

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)不适用于arguments()”错误)

【问题讨论】:

  • 你好,不是很清楚你想要什么,能不能把你正在使用的代码贴出来。

标签: java android layout if-statement android-layout


【解决方案1】:

最简单的方法,您只需调用ViewFlipper.getDisplayedChild() 并根据索引(0、1、2)进行比较。如果绝对有必要通过 id 进行比较,您也可以这样做:

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

【讨论】:

  • 谢谢!我期待着这样的答复。但我还是有一些问题。这是我所做的: ViewFlipper viewFlipper=(ViewFlipper)findViewById(R.id.flipper); if(viewFlipper.getCurrentView().getId()==R.id.AbsoluteLayout01){statement1} 类似于语句 2 和语句 3。它适用于前两个 if 而不是第三个 if(我的意思是第三个屏幕)。顺便说一句,我使用了“Toast.makeText(getApplicationContext(), viewFlipper.getCurrentView().getId(), Toast.LENGTH_LONG).show();”在 onFling 里面,我总是把“False”当作吐司。
  • 问题详情:这就是我所做的:ViewFlipper viewFlipper=(ViewFlipper)findViewById(R.id.flipper); if(viewFlipper.getCurrentView().getId()==R.id.AbsoluteLayout01){statement1} 类似于语句 2 和语句 3。它适用于前两个 if 而不是第三个 if(我的意思是第三个屏幕)。顺便说一句,我使用了“Toast.makeText(getApplicationContext(), viewFlipper.getCurrentView().getId(), Toast.LENGTH_LONG).show();”在 onFling 里面,我总是把“False”当作吐司。
  • 非常感谢!该代码现在正在运行。我在语句 3 中有一个小的逻辑错误。现在每个屏幕的相应代码都可以正常工作。你让我很快乐!我的问题的答案是“viewFlipper.getCurrentView().getId()”
  • 啊,我明白了!我认为这可能是索引混淆或其他原因。很高兴你成功了!
【解决方案2】:

除非您重载 == 运算符,否则在视图之间使用 == 将不起作用....

尝试 .equals() 代替。

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

其中 v1 是一个视图。

【讨论】:

  • "除非你重写 == 操作符..." -- 祝你在 Java 中能做到这一点。
  • @Ted Hopp。非常有趣,我没有意识到运算符重载在 Java 中并不常见(我自己从未尝试过)。每天学习新东西。然而,看到人们尝试在所有事情上做 == 而不阅读错误消息,我真的很痛苦......
【解决方案3】:

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

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

作为 findViewById 要么返回一个视图,如果它找到它,或者返回 null。

至于如何找到layout id,你有没有试过R.layout.(...)?如果它们都是单独的 xml 文件,这将起作用,因为它返回整个文件的唯一编号,而不是文件内的视图组。

【讨论】:

  • @f20k - 您提供的代码可能不会抛出错误,但它没有用。作为给定的代码,使用 AbosluteLayout01 的对象 v1 检查 AbsoluteLayout01。两者是相同的,因此语句将一直执行。 @Steve H - 我试过这个,但就像上面 f20k 的逻辑一样,即使这个也总是返回 true。 @Lucas S. - 就像我说的,我需要获取由鳍状肢显示的绝对布局的 id。顺便说一句,谢谢大家帮助我。
【解决方案4】:

也许连接到鳍状肢的听众可以告诉你你需要知道什么?

链接 - Touch Scroll on View Flipper in Android?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    • 1970-01-01
    相关资源
    最近更新 更多