如何创建一个封闭(循环)ListView?

如何创建一个封闭(循环)ListView?

我想创建一个自定义的ListView(或类似的),其行为类似于封闭(循环)的:

  1. 向下滚动 - 在到达最后一个项目后第一个开始(..,n-1,n,1,2,...)

  2. 向上滚动 - 在第一个项目到达后,最后一个开始(...,2,1,1,n,n-1,..)

这在概念上听起来很简单,但显然,没有直接的方法来做到这一点。谁能指出我正确的解决方案?谢谢 !

我已经收到一个答案(来自Streets Of Boston的Android开发者谷歌团体),但听起来有些丑陋:) -

我这样做是通过创建自己的列表适配器(从BaseAdapter子类)。

我编写了自己的列表适配器,其getCount()方法返回一个HUUUUGE编号。

如果选择项'x',则此项对应于适配器位置='adapter.getCount()/ 2 + x'

对于我的适配器的方法getItem(int position),我查看我的数组备份适配器并获取索引上的项目:(position-getCount()/ 2)%myDataItems.length

你需要做一些更“特殊”的东西才能使它完全正常工作,但你明白了。

原则上,它仍然可以到达列表的结尾或开头,但如果你将getCount()设置为大约一百万左右,这很难做到:-)


江户川乱折腾
浏览 324回答 3
3回答

拉风的咖菲猫

你提到的解决方案是我告诉其他开发人员过去使用的解决方案。在getCount()中,只需返回Integer.MAX_VALUE,它将为您提供大约20亿个项目,这应该足够了。

偶然的你

基于上面的答案,我有,或者我认为我做得对。希望这会帮助你。private static class RecipeListAdapter extends BaseAdapter {     private static LayoutInflater   mInflater;     private Integer[]               mCouponImages;     private static ImageView        viewHolder;     public RecipeListAdapter(Context c, Integer[] coupomImages) {         RecipeListAdapter.mInflater = LayoutInflater.from(c);         this.mCouponImages = coupomImages;     }     @Override     public int getCount() {         return Integer.MAX_VALUE;     }     @Override     public Object getItem(int position) {        // you can do your own tricks here. to let it display the right item in your array.         return position % mCouponImages.length;     }     @Override     public long getItemId(int position) {         return position;         // return position % mCouponImages.length;     }     @Override     public View getView(int position, View convertView, ViewGroup parent) {         if (convertView == null) {             convertView = mInflater.inflate(R.layout.coupon_list_item, null);             viewHolder = (ImageView) convertView.findViewById(R.id.item_coupon);             convertView.setTag(viewHolder);         } else {             viewHolder = (ImageView) convertView.getTag();         }         viewHolder.setImageResource(this.mCouponImages[position %     mCouponImages.length]);         return convertView;     }}如果你想向下滚动列表,你想这样做。通常我们可以向上滚动并列出然后向下滚动。//查看我们想要滚动的项目数量。在这种情况下,Integer.MAX_VALUEint listViewLength = adapter.getCount();// see how many items a screen can dispaly, I use variable "span"     final int span = recipeListView.getLastVisiblePosition() - recipeListView.getFirstVisiblePosition();//查看我们有多少页面int howManySpans = listViewLength / span;//在启动列表视图时查看您想要的位置。你不必做“-3”的事情。这是我的应用程序正常工作。recipeListView.setSelection((span * (howManySpans / 2)) - 3);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MySQL