仿餓了嗎點(diǎn)餐界面ListView聯(lián)動(dòng)的實(shí)現(xiàn)
在上篇文章給大家介紹了仿餓了嗎點(diǎn)餐界面兩個(gè)ListView聯(lián)動(dòng)效果
主要實(shí)現(xiàn)了2個(gè)ListView怎樣實(shí)現(xiàn)互相關(guān)聯(lián),正好上篇博客review了ListView控件常規(guī)使用,因此本篇博客主要對(duì)大神的那篇博客的實(shí)現(xiàn)進(jìn)行代碼層的剖析。
一方面,方便自己,在以后的代碼實(shí)現(xiàn)上加以參考。另一方面,供剛?cè)腴T的Android菜鳥(niǎo)們共同學(xué)習(xí)。
二、最終的效果圖

如上圖效果圖為仿餓了么點(diǎn)餐界面的ListView級(jí)聯(lián)
三、實(shí)現(xiàn)ListView級(jí)聯(lián)的困難點(diǎn)
為了好做區(qū)分,在本文中左側(cè)的ListView稱之為MenuListView,右側(cè)的ListView稱之為ItemListView。
1.兩個(gè)ListView在整個(gè)Activity中的Layout布局問(wèn)題
2.手動(dòng)點(diǎn)擊MenuListView的item,ItemListView怎么觸發(fā)與之關(guān)聯(lián)顯示
如當(dāng)點(diǎn)擊MenuListView中的“新品套餐”,右側(cè)ItemListView的getView如何顯示新品套餐的內(nèi)容。
3.手動(dòng)滑動(dòng)ItemListView時(shí),MenuListView怎么關(guān)聯(lián)到當(dāng)前點(diǎn)擊項(xiàng)
如當(dāng)手動(dòng)滑動(dòng)ItemListView為“飲料類”時(shí),左側(cè)的MenuListView的當(dāng)前點(diǎn)擊Item顯示為飲料類,即背景色為白色。
四、代碼實(shí)現(xiàn)
1.ListView的布局問(wèn)題
看到這個(gè)截圖的時(shí)候,第一想到的是用權(quán)重的顯示,即Android:layout_weight
第一次嘗試
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <ListView android:id="@+id/lv_menu" android:layout_weight="1" android:layout_height="match_parent" android:layout_width="wrap_content" /> <ListView android:id="@+id/lv_item" android:layout_height="match_parent" android:layout_weight="2" android:layout_width="wrap_content" /> </LinearLayout>
則效果圖如下:

第二次嘗試,將android:layout_width="wrap_content"替換為android:layout_width="0dp"
則可以按需要顯示。
2.手動(dòng)點(diǎn)擊MenuListView的item,ItemListView怎么觸發(fā)與之關(guān)聯(lián)顯示
MenuListView和ItemListView的關(guān)聯(lián)顯示主要是通過(guò)listView自帶的函數(shù)setSelection()來(lái)關(guān)聯(lián)的
比如說(shuō),當(dāng)MenuListView顯示第i項(xiàng)時(shí)候,則ItemListView根據(jù)i值關(guān)聯(lián)到i項(xiàng)的第一個(gè)值,然后設(shè)置他為當(dāng)前的setSelection.
代碼中的實(shí)現(xiàn)如下:
對(duì)MenuListView的item進(jìn)行監(jiān)聽(tīng)
mListMenu.setOnItemClickListener(new ListView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
//設(shè)置當(dāng)前點(diǎn)擊項(xiàng)為i項(xiàng)
mMenuAdapter.setSelectItem(i);
mMenuAdapter.notifyDataSetInvalidated();//
//設(shè)置ItemListView的點(diǎn)擊項(xiàng)為i項(xiàng)的第一個(gè)item
mListItem.setSelection(mTitleList.get(i));
}
});
而i項(xiàng)的第一個(gè)item的獲取則是通過(guò)如下代碼來(lái)實(shí)現(xiàn)的
mTitleList = new ArrayList<Integer>();
//遍歷所有item.size(),然后將第一個(gè)title不同的項(xiàng)對(duì)應(yīng)的值保存起來(lái),則關(guān)聯(lián)到每一個(gè)item對(duì)應(yīng)到size中的值
for (int i=0;i<mfoodDatas.size();i++){
if (i==0){
mTitleList.add(i);
}else if(!TextUtils.equals(mfoodDatas.get(i).getTitle(),mfoodDatas.get(i-1).getTitle())){
mTitleList.add(i);
}
}
3.手動(dòng)滑動(dòng)ItemListView時(shí),MenuListView怎么關(guān)聯(lián)到當(dāng)前點(diǎn)擊項(xiàng)
mListItem.setOnScrollListener(new AbsListView.OnScrollListener() {
private int scrollState;
@Override
public void onScrollStateChanged(AbsListView absListView, int i) {
this.scrollState = i;
}
@Override
public void onScroll(AbsListView absListView,
int firstVisibleItem,
int visibleItemCount,
int totalItemCount) {
if(scrollState== AbsListView.OnScrollListener.SCROLL_STATE_IDLE){
return;
}
//判斷當(dāng)前的item是否是view中第一個(gè)可見(jiàn)的item
int current = mTitleList.indexOf(firstVisibleItem);
if(current!=currentItem && current>0){
currentItem=current;
//若不是的話,將menuListView的item設(shè)置currentItem,來(lái)與itemListView關(guān)聯(lián)
mMenuAdapter.setSelectItem(currentItem);
mMenuAdapter.notifyDataSetInvalidated();
}
}
});
以上所述是小編給大家介紹的仿餓了嗎點(diǎn)餐界面ListView聯(lián)動(dòng)的實(shí)現(xiàn),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- 仿餓了嗎點(diǎn)餐界面兩個(gè)ListView聯(lián)動(dòng)效果
- Android中使用開(kāi)源框架Citypickerview實(shí)現(xiàn)省市區(qū)三級(jí)聯(lián)動(dòng)選擇
- Android自定義WheelView地區(qū)選擇三級(jí)聯(lián)動(dòng)
- Android省市區(qū)三級(jí)聯(lián)動(dòng)控件使用方法實(shí)例講解
- android-wheel控件實(shí)現(xiàn)三級(jí)聯(lián)動(dòng)效果
- Android仿eleme點(diǎn)餐頁(yè)面二級(jí)聯(lián)動(dòng)列表
- Android使用android-wheel實(shí)現(xiàn)省市縣三級(jí)聯(lián)動(dòng)
- Android實(shí)現(xiàn)兩個(gè)ScrollView互相聯(lián)動(dòng)的同步滾動(dòng)效果代碼
- Android實(shí)現(xiàn)聯(lián)動(dòng)下拉框 下拉列表spinner的實(shí)例代碼
- 6步輕松實(shí)現(xiàn)兩個(gè)listView聯(lián)動(dòng)效果
相關(guān)文章
Android?Activity?View加載與繪制流程深入刨析源碼
這篇文章主要介紹了Android?Activity?View的加載與繪制流程源碼分析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
Android AlertDialog六種創(chuàng)建方式案例詳解
這篇文章主要介紹了Android AlertDialog六種創(chuàng)建方式案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
Android編程實(shí)現(xiàn)為L(zhǎng)istView創(chuàng)建上下文菜單(ContextMenu)的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)為L(zhǎng)istView創(chuàng)建上下文菜單(ContextMenu)的方法,簡(jiǎn)單分析了上下文菜單的功能及ListView創(chuàng)建上下文菜單(ContextMenu)的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-02-02
Android仿英語(yǔ)流利說(shuō)取詞放大控件的實(shí)現(xiàn)方法(附demo源碼下載)
這篇文章主要介紹了Android仿英語(yǔ)流利說(shuō)取詞放大控件的實(shí)現(xiàn)方法,較為詳細(xì)的分析了取詞放大控件的實(shí)現(xiàn)步驟與相關(guān)技巧,需要的朋友可以參考下2016-02-02
Android4.X讀取SIM卡短信和聯(lián)系人相關(guān)類實(shí)例分析
這篇文章主要介紹了Android 4.X讀取SIM卡短信和聯(lián)系人相關(guān)類,以實(shí)例形式分析了Android 4.X讀取SIM卡短信和聯(lián)系人的兩個(gè)相關(guān)類的功能、用法與注意事項(xiàng),具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10
Flutter仿微信通訊錄實(shí)現(xiàn)自定義導(dǎo)航條的示例代碼
某些頁(yè)面比如我們?cè)谶x擇聯(lián)系人或者某個(gè)城市的時(shí)候需要快速定位到我們需要的選項(xiàng),一般都會(huì)需要像微信通訊錄右邊有一個(gè)導(dǎo)航條一樣的功能,本文將利用Flutter實(shí)現(xiàn)這一效果,需要的可以參考一下2022-04-04
Android毛玻璃背景效果簡(jiǎn)單實(shí)現(xiàn)代碼
這篇文章主要介紹了Android毛玻璃背景效果簡(jiǎn)單實(shí)現(xiàn)代碼,需要的朋友可以參考下2017-08-08

