如何創建一個封閉(循環)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億個項目,這應該足夠了。

偶然的你
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);
添加回答
舉報
0/150
提交
取消