Android:在使用单一资源的活动之间滑动



我有一个活动(A)与一个列表视图,打开第二个活动(B)显示与点击行相关的详细信息。活动(B)用以下代码打开:

Intent ident = new Intent(getApplicationContext(), DetailedActivity.class);
ident.putExtra("id", id);
startActivity(ident);

我想要的是当活动(B)打开时,能够向左或向右滑动以显示前一个/下一个ListView行的详细信息。我找不到一种方法来使用ViewFlipper重新加载相同的视图为不同的id…

有什么想法吗?

我不认为ViewFlipper是你想要使用的。你可以使用GestureDector来获取向左和向右滑动动作的回调。然后在你的回调中你可以这样做:

OnRightSwipe(){
    Intent ident = new Intent(YourActivity.this, DetailedActivity.class);
    ident.putExtra("id", this.getIntent().getExtra("id") + 1);
    startActivity(ident);
}

OnLeftSwipe(){
    Intent ident = new Intent(YourActivity.this, DetailedActivity.class);
    ident.putExtra("id", this.getIntent().getExtra("id") - 1);
    startActivity(ident);
}

指出:

OnRightSwipe和OnLeftSwipe不是实际的方法名,你需要查找回调是什么,我没有现成的例子。

只有当你传递的id是可以自增或自减的数字时才有效。如果不是这样,您将不得不发布一些更多的代码,以便我提供帮助。另外,如果你的id被存储为一个额外的字符串,那么在你可以自增/自减之前,你必须解析为int。

,最后注意YourActivity的使用。这个代替getApplicationContext()。由于您所在的活动是一个上下文,因此不需要为此目的使用此方法。这有点超出了我的理解,但是我相信getApplicationContext()和getBaseContext()方法会导致问题。

编辑:

如果你指的是类似于主屏幕滚动的东西,那么我认为没有内置的小部件可以给你这种效果。最好的方法似乎是看看他们在主屏幕源代码中是如何做到的,然后复制他们所做的,然后尝试将其适合你自己的布局情况。

如果你不希望它"跟随"滑动手指:

如果你试图在两个独立的活动之间翻转,那么ViewFlipper将无法工作。ViewFlipper用于在同一活动中的两个不同的布局对象之间翻转。

我认为你可能会在两个活动之间接近达到类似的效果,但在决定这样做之前,有一些事情你应该考虑。

  • 很多版本的操作系统已经有活动进出动画。用户可以选择默认关闭它们,但如果它们在当前出售的大多数设备中都是打开的。这意味着你最终可能会看到幻灯片退出动画然后是系统动画,然后是系统动画,然后是幻灯片进入。我不确定这是否会发生,但我认为可能会发生,我想如果是这样的话,有一些方法可以绕过它。
  • Activity B将不得不以某种方式告诉Activity B的新实例(可能使用另一个putExtra)它需要从哪个方向滑动。

要实现幻灯片在两个活动之间的幻灯片类型动画,你可以做的就是在你的xml设置你的根布局为android:visibility="gone",然后在onCreate()中调用setContentView(R.id.yourLayout);后设置你的slideInAnimation,并获得对你的根布局的引用,并开始在它上滑动。然后就在你调用startActivity()之前在你的滑动监听器(你必须设置一个animationListener来获得一个回调动画完成后,回调是你需要移动startActivity()调用到),你可以设置一个开始你的根布局参考动画。

然而,我可能会建议,无论上面哪一个你寻找你应该考虑一个模型,你的细节活动不只是简单地显示一个静态记录,你开始一个新的活动来显示前一个或下一个。相反,它能够使用ViewFlipper在detail activity的一个实例中循环遍历它们。如果你用这种方式,那么你会使用ViewFlipper并且使用是的,你可以将它与fling监听器一起使用。你可以自己捣碎它们,或者查看@CommonsGuy制作的ViewSwiper,它就是为此而构建的,并且准备好放到我们的项目中。

我在这里找到了所有我需要的:ViewPager实现一个好的效果并不需要太多的努力。

最新更新