江戶(hù)川亂折騰
2019-11-20 17:13:51
如何創(chuàng)建一個(gè)封閉(循環(huán))ListView?我想創(chuàng)建一個(gè)自定義的ListView(或類(lèi)似的),其行為類(lèi)似于封閉(循環(huán))的:向下滾動(dòng) - 在到達(dá)最后一個(gè)項(xiàng)目后第一個(gè)開(kāi)始(..,n-1,n,1,2,...)向上滾動(dòng) - 在第一個(gè)項(xiàng)目到達(dá)后,最后一個(gè)開(kāi)始(...,2,1,1,n,n-1,..)這在概念上聽(tīng)起來(lái)很簡(jiǎn)單,但顯然,沒(méi)有直接的方法來(lái)做到這一點(diǎn)。誰(shuí)能指出我正確的解決方案?謝謝 !我已經(jīng)收到一個(gè)答案(來(lái)自Streets Of Boston的Android開(kāi)發(fā)者谷歌團(tuán)體),但聽(tīng)起來(lái)有些丑陋:) -我這樣做是通過(guò)創(chuàng)建自己的列表適配器(從BaseAdapter子類(lèi))。我編寫(xiě)了自己的列表適配器,其getCount()方法返回一個(gè)HUUUUGE編號(hào)。如果選擇項(xiàng)'x',則此項(xiàng)對(duì)應(yīng)于適配器位置='adapter.getCount()/ 2 + x'對(duì)于我的適配器的方法getItem(int position),我查看我的數(shù)組備份適配器并獲取索引上的項(xiàng)目:(position-getCount()/ 2)%myDataItems.length你需要做一些更“特殊”的東西才能使它完全正常工作,但你明白了。原則上,它仍然可以到達(dá)列表的結(jié)尾或開(kāi)頭,但如果你將getCount()設(shè)置為大約一百萬(wàn)左右,這很難做到:-)
3 回答

拉風(fēng)的咖菲貓
TA貢獻(xiàn)1995條經(jīng)驗(yàn) 獲得超2個(gè)贊
你提到的解決方案是我告訴其他開(kāi)發(fā)人員過(guò)去使用的解決方案。在getCount()中,只需返回Integer.MAX_VALUE,它將為您提供大約20億個(gè)項(xiàng)目,這應(yīng)該足夠了。

偶然的你
TA貢獻(xiàn)1841條經(jīng)驗(yàn) 獲得超3個(gè)贊
基于上面的答案,我有,或者我認(rèn)為我做得對(duì)。希望這會(huì)幫助你。
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; }}
如果你想向下滾動(dòng)列表,你想這樣做。通常我們可以向上滾動(dòng)并列出然后向下滾動(dòng)。
//查看我們想要滾動(dòng)的項(xiàng)目數(shù)量。在這種情況下,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();
//查看我們有多少頁(yè)面
int howManySpans = listViewLength / span;
//在啟動(dòng)列表視圖時(shí)查看您想要的位置。你不必做“-3”的事情。這是我的應(yīng)用程序正常工作。
recipeListView.setSelection((span * (howManySpans / 2)) - 3);
添加回答
舉報(bào)
0/150
提交
取消