仿餓了嗎點(diǎn)餐界面兩個(gè)ListView聯(lián)動(dòng)效果
如圖是效果圖
是仿餓了的點(diǎn)餐界面
1.點(diǎn)擊左側(cè)的ListView,通過在在適配器中設(shè)置Item來改變顏色,再通過notifyDataSetInvalidated來刷新并用lv_home.setSelection(showTitle.get(arg2));來關(guān)聯(lián)右側(cè)的
2.右側(cè)的主要是重寫下onScroll的方法;來改變左側(cè)ListView的顏色及背景
不過程序中還有個(gè)問題,望大神解答就是我右側(cè)的ListView下拉時(shí),上面的TextView能改變;但是上拉時(shí),TextView的不能及時(shí)改變應(yīng)為滑動(dòng)時(shí)我只拿了firstVisibleItem來判斷的
Demo的連接:http://download.csdn.net/detail/qq_29774291/9634011
如下是主程序代碼
package com.item.jiejie; import java.util.ArrayList; import java.util.List; import com.item.jiejie.adapter.HomeAdapter; import com.item.jiejie.adapter.MenuAdapter; import com.item.jiejie.entity.FoodData; import android.widget.AbsListView.OnScrollListener; import android.os.Bundle; import android.app.Activity; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.view.Window; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.AbsListView; import android.widget.ListView; import android.widget.TextView; /** * 防餓了的ListView聯(lián)動(dòng)的Demo * 有BUG * @author Administrator * */ public class MainActivity extends Activity { /**左側(cè)菜單*/ private ListView lv_menu; /**右側(cè)主菜*/ private ListView lv_home; private TextView tv_title; private MenuAdapter menuAdapter; private HomeAdapter homeAdapter; private int currentItem; /** * 數(shù)據(jù)源 */ private List<FoodData> foodDatas; private String data[] = {"熱銷榜","新品套餐","便當(dāng)套餐","單點(diǎn)菜品","飲料類","水果罐頭","米飯"}; /** * 里面存放右邊ListView需要顯示標(biāo)題的條目position */ private ArrayList<Integer> showTitle; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); setView(); setData(); } private void setView() { // TODO Auto-generated method stub lv_menu = (ListView)findViewById(R.id.lv_menu); tv_title = (TextView)findViewById(R.id.tv_titile); lv_home = (ListView)findViewById(R.id.lv_home); foodDatas = new ArrayList<FoodData>(); for(int i =0;i < data.length; i++){ foodDatas.add(new FoodData(i, data[0] + i, data[0])); } for(int i =0;i < data.length -1; i++){ foodDatas.add(new FoodData(i, data[1] + i, data[1])); } for(int i =0;i < data.length-2; i++){ foodDatas.add(new FoodData(i, data[2] + i, data[2])); } for(int i =0;i < data.length-3; i++){ foodDatas.add(new FoodData(i, data[3] + i, data[3])); } for(int i =0;i < data.length-4; i++){ foodDatas.add(new FoodData(i, data[4] + i, data[4])); } for(int i =0;i < data.length-3; i++){ foodDatas.add(new FoodData(i, data[5] + i, data[5])); } for(int i =0;i < 6; i++){ foodDatas.add(new FoodData(i, data[6] + i, data[6])); } showTitle = new ArrayList<Integer>(); for(int i = 0; i < foodDatas.size(); i++){ if( i ==0){ showTitle.add(i ); System.out.println(i + "dd"); }else if (!TextUtils.equals(foodDatas.get(i).getTitle(), foodDatas.get(i - 1).getTitle())) { showTitle.add(i ); System.out.println(i + "dd"); } } } private void setData() { // TODO Auto-generated method stub tv_title.setText(foodDatas.get(0).getTitle()); menuAdapter = new MenuAdapter(this); homeAdapter = new HomeAdapter(this, foodDatas); lv_menu.setAdapter(menuAdapter); lv_home.setAdapter(homeAdapter); lv_menu.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub menuAdapter.setSelectItem(arg2); menuAdapter.notifyDataSetInvalidated(); lv_home.setSelection(showTitle.get(arg2)); tv_title.setText(data[arg2]); } }); lv_home.setOnScrollListener(new OnScrollListener() { private int scrollState; @Override public void onScrollStateChanged(AbsListView view, int scrollState) { // TODO Auto-generated method stub //System.out.println("onScrollStateChanged" + " scrollState" + scrollState); this.scrollState = scrollState; } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { // TODO Auto-generated method stub if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) { return; } Log.d("jiejie", "onScroll" + " firstVisibleItem" + firstVisibleItem +" visibleItemCount" + visibleItemCount + " totalItemCount" + totalItemCount); int current =showTitle.indexOf(firstVisibleItem ); System.out.println(current + "dd" + firstVisibleItem); // lv_home.setSelection(current); if(currentItem != current && current >=0){ currentItem = current; tv_title.setText(data[current]); menuAdapter.setSelectItem(currentItem); menuAdapter.notifyDataSetInvalidated(); } } }); } }
左側(cè)ListView的適配器代碼
package com.item.jiejie.adapter; import com.item.jiejie.R; import android.content.Context; import android.graphics.Color; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; /** * 左側(cè)菜單ListView的適配器 * @author Administrator * */ public class MenuAdapter extends BaseAdapter{ private Context context; private int selectItem = 0; private String data[] = {"熱銷榜","新品套餐","便當(dāng)套餐","單點(diǎn)菜品","飲料類","水果罐頭","米飯"}; public MenuAdapter(Context context) { this.context = context; } public int getSelectItem() { return selectItem; } public void setSelectItem(int selectItem) { this.selectItem = selectItem; } @Override public int getCount() { // TODO Auto-generated method stub return data.length; } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int arg0) { // TODO Auto-generated method stub return 0; } @Override public View getView(int arg0, View arg1, ViewGroup arg2) { // TODO Auto-generated method stub ViewHolder holder = null; if(arg1 == null) { holder = new ViewHolder(); arg1 = View.inflate(context, R.layout.item_menu, null); holder.tv_name = (TextView)arg1.findViewById(R.id.item_name); arg1.setTag(holder); }else { holder = (ViewHolder)arg1.getTag(); } if(arg0 == selectItem){ holder.tv_name.setBackgroundColor(Color.WHITE); holder.tv_name.setTextColor(context.getResources().getColor(R.color.text_green)); }else { holder.tv_name.setBackgroundColor(context.getResources().getColor(R.color.ll_coachback)); holder.tv_name.setTextColor(context.getResources().getColor(R.color.text_deep)); } holder.tv_name.setText(data[arg0]); return arg1; } static class ViewHolder{ private TextView tv_name; } }
右側(cè)的適配器代碼
package com.item.jiejie.adapter; import java.util.List; import com.item.jiejie.R; import com.item.jiejie.entity.FoodData; import android.content.Context; import android.text.TextUtils; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; /** * 右側(cè)主界面ListView的適配器 * * @author Administrator * */ public class HomeAdapter extends BaseAdapter { private Context context; private List<FoodData> foodDatas; public HomeAdapter(Context context, List<FoodData> foodDatas) { this.context = context; this.foodDatas = foodDatas; } @Override public int getCount() { // TODO Auto-generated method stub if(foodDatas!=null){ return foodDatas.size(); }else { return 10; } } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int arg0) { // TODO Auto-generated method stub return 0; } @Override public View getView(int arg0, View arg1, ViewGroup arg2) { // TODO Auto-generated method stub ViewHold holder = null; if(arg1 == null){ arg1 = View.inflate(context, R.layout.item_home, null); holder = new ViewHold(); holder.tv_title = (TextView)arg1.findViewById(R.id.item_home_title); holder.tv_name = (TextView)arg1.findViewById(R.id.item_home_name); arg1.setTag(holder); }else { holder = (ViewHold)arg1.getTag(); } holder.tv_name.setText(foodDatas.get(arg0).getName()); holder.tv_title.setText(foodDatas.get(arg0).getTitle()); if(arg0 == 0){ holder.tv_title.setVisibility(View.VISIBLE); }else if (!TextUtils.equals(foodDatas.get(arg0).getTitle(), foodDatas.get(arg0 -1).getTitle())) { holder.tv_title.setVisibility(View.VISIBLE); }else { holder.tv_title.setVisibility(View.GONE); } return arg1; } private static class ViewHold{ private TextView tv_title; private TextView tv_name; } }
以上所述是小編給大家介紹的仿餓了點(diǎn)餐界面2個(gè)ListView聯(lián)動(dòng)效果,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- 仿餓了嗎點(diǎn)餐界面ListView聯(lián)動(dòng)的實(shí)現(xiàn)
- Android中使用開源框架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)餐頁面二級(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)三級(jí)聯(lián)動(dòng)下拉框 下拉列表spinner的實(shí)例代碼
- 6步輕松實(shí)現(xiàn)兩個(gè)listView聯(lián)動(dòng)效果
相關(guān)文章
android開發(fā)基礎(chǔ)教程—三種方式實(shí)現(xiàn)xml文件解析
本文將介紹三種方式:sax方式/dom方式/pull方式實(shí)現(xiàn)xml文件解析,感興趣的朋友可以了解下2013-01-01Android統(tǒng)一依賴管理的三種方式總結(jié)
為了項(xiàng)目的管理,依賴包的紡一管理是必要的,下面這篇文章主要給大家介紹了關(guān)于Android統(tǒng)一依賴管理的三種方式,文中通過實(shí)例代碼和圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-01-01mac開發(fā)android環(huán)境搭建步驟圖解
這里比較詳細(xì)的來總結(jié)下mac開發(fā)android的環(huán)境搭建步驟安裝過程,希望對(duì)一些正準(zhǔn)備配置Android開發(fā)環(huán)境的小伙伴們有一定幫助2014-01-01在RecyclerView中實(shí)現(xiàn)button的跳轉(zhuǎn)功能
本次實(shí)驗(yàn)就是在RecyclerView中添加一個(gè)button控件并實(shí)現(xiàn)監(jiān)聽,使鼠標(biāo)點(diǎn)擊時(shí)可以跳轉(zhuǎn)到另外一個(gè)設(shè)計(jì)好的界面,對(duì)RecyclerView實(shí)現(xiàn)button跳轉(zhuǎn)功能感興趣的朋友一起看看吧2021-10-10Android 斷點(diǎn)下載和自動(dòng)安裝的示例代碼
本篇文章主要介紹了Android斷點(diǎn)下載和自動(dòng)安裝的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-01-01android異步任務(wù)設(shè)計(jì)思詳解(AsyncTask)
AsyncTask在Android十分常用,那為什么如此常用呢,不用行不行呢,內(nèi)部又是怎么實(shí)現(xiàn)的呢,為什么Java的API中沒有這個(gè)類呢,看完本文后,你將會(huì)知道答案2014-02-02Android開發(fā)實(shí)現(xiàn)簡單的觀察者與被觀察者示例
這篇文章主要介紹了Android開發(fā)實(shí)現(xiàn)簡單的觀察者與被觀察者,簡單描述了觀察者模式的概念、原理并結(jié)合實(shí)例形式分析了Android實(shí)現(xiàn)觀察者模式的簡單操作技巧,需要的朋友可以參考下2017-11-11Android實(shí)現(xiàn)仿通訊錄側(cè)邊欄滑動(dòng)SiderBar效果代碼
這篇文章主要介紹了Android實(shí)現(xiàn)仿通訊錄側(cè)邊欄滑動(dòng)SiderBar效果代碼,實(shí)例分析了通訊錄側(cè)邊欄滑動(dòng)效果的實(shí)現(xiàn)技巧,并附帶完整實(shí)例代碼供讀者下載參考,需要的朋友可以參考下2015-10-10