为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

江户川乱折腾 2019-11-20 17:13:51
如何创建一个封闭(循环)ListView?我想创建一个自定义的ListView(或类似的),其行为类似于封闭(循环)的:向下滚动 - 在到达最后一个项目后第一个开始(..,n-1,n,1,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()设置为大约一百万左右,这很难做到:-)
查看完整描述

3 回答

?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

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

查看完整回答
反对 回复 2019-11-21
?
偶然的你

TA贡献1841条经验 获得超3个赞

基于上面的答案,我有,或者我认为我做得对。希望这会帮助你。

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_VALUE

int 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);



查看完整回答
反对 回复 2019-11-21
  • 3 回答
  • 0 关注
  • 319 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信