Android:带有onBackPressed的ViewFlipper

时间:2012-02-10 16:17:40

标签: android viewflipper

我在我的应用程序中使用ViewFlipper,并在页面内移动,我使用Button for next并捕获onBackPressing返回。

行为如下:

1)我点击按钮移动到2页。 2)点击返回并编写代码 3)再次单击按钮 4)点击返回,现在不再工作了

在第4步,我可以感觉到振动,所以事件发生了火灾,但是我的观察者不会回去。

有什么建议吗?

感谢的

2 个答案:

答案 0 :(得分:2)

public void onBackPressed() {


        if (flipView.getDisplayedChild() == 1) {
            flipView.setDisplayedChild(0);

        } else if (flipView.getDisplayedChild() == 0) {
            flipView.setDisplayedChild(1);
        }

    }

这对我来说很有效。将onBackPressed更改为调用后退按钮的方法。

答案 1 :(得分:1)

只是为了回答其他答案。

让我们说我们只有两种观点,我们正在努力:

  public void onBackPressed() {

    if (mViewFlipper.getDisplayedChild() == 1) {
        mViewFlipper.setDisplayedChild(0);
     } else if (mViewFlipper.getDisplayedChild() == 0) {
        flipView.setDisplayedChild(1);
    }
}

还不够。事实上,它给你带来了另一个问题。 如果视图在0(第一个)中,然后按下后退按钮,则会发生NOTHING。活动没有退出。这是因为您没有调用super.onBackPressed()。现在,将super.onBackPressed()添加到上面的代码中也会产生另一个问题。当你从1(第二个视图)翻转时,它会转到第一个视图(0),然后退出活动,如果不是因为除了在从一个活动转换到另一个活动时跳过视图的奇怪动画,这是错误的。 / p>

为包含onBackPressed()的活动实施ViewFlipper的最佳方法是:

  public void onBackPressed() {
    int displayedChildId = mViewFlipper.getDisplayedChild(); //get current view's number
    if (displayedChildId > 0) { //if this number is greater than 0(let's say 5)
        mViewFlipper.setDisplayedChild(displayedChildId - 1);//We then go down that number by 1. That is 5 - 1, which is 4. This happens until displayedChildId isn't greater than 0 anymore, which is then the first view. if we press back from here, we exit the activity.
    } else {
        super.onBackPressed();
    }
}

我希望这是有道理的