仿餓了麼,百度外賣這些App的雙ListView列表聯動效果
阿新 • • 發佈:2019-01-31
三、將兩個ListView放在一個佈局內,監聽左邊ListView的點選事件和右邊ListView 滾動事件 實現步驟:看註釋吧... 主介面<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#f9f9f9" android:gravity="center" android:orientation="vertical" > <TextView android:id="@+id/tv_right" android:layout_width="match_parent" android:layout_height="70px" android:background="@color/green" android:gravity="center" android:textColor="#333333" android:textSize="18sp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="90dp" android:background="@color/white" android:gravity="center_vertical" android:orientation="horizontal" > <ImageView android:layout_width="80dp" android:layout_height="80dp" android:background="@mipmap/ic_launcher" /> <TextView android:id="@+id/tv_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="50dp" android:text="右邊條目" android:textColor="@color/textcolor" android:textSize="18sp" /> </LinearLayout> </LinearLayout>
DoubleListBeanpackage ouyang.doublelist; import android.graphics.Color; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.ListView; import android.widget.TextView; import java.util.ArrayList; import butterknife.Bind; import butterknife.ButterKnife; import oypf.doublistview.R; public class MainActivity extends AppCompatActivity { String titles[] = {"蔬菜1", "水果1", "姓氏1", "蔬菜2", "水果2", "姓氏2", "蔬菜3", "水果3", "姓氏3", "蔬菜4", "水果4", "姓氏4", "蔬菜5", "水果5", "姓氏5"}; String name1[] = {"蘿蔔", "大蔥", "茄子", "大蒜", "生薑", "蘿蔔", "大蔥", "茄子", "大蒜", "生薑", "蘿蔔", "大蔥"}; String name2[] = {"蘋果", "梨", "香蕉", "西瓜", "橘子", "大棗", "菠蘿", "紅提", "葡萄", "櫻桃", "椰子"}; String name3[] = {"鄭", "王", "伊", "荊", "湯", "王", "孫", "李", "錢", "趙", "祁", "韋", "巨集"};; @Bind(R.id.lv_left) ListView lvLeft; @Bind(R.id.lv_Right) PinnedHeaderListview lvRight; private ArrayList<DoubleListBean> lists; private int position; private LeftAdapter leftAdapter; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); initData(); initView(); initListener(); } private void initData() { //弄點資料 lists = new ArrayList<>(); for (int i = 0; i < name1.length; i++) { lists.add(new DoubleListBean(name1[i] + 1, i, titles[0])); } for (int i = 0; i < name2.length; i++) { lists.add(new DoubleListBean(name2[i] + 1, i, titles[1])); } for (int i = 0; i < name3.length; i++) { lists.add(new DoubleListBean(name3[i] + 1, i, titles[2])); } for (int i = 0; i < name1.length; i++) { lists.add(new DoubleListBean(name1[i] + 2, i, titles[3])); } for (int i = 0; i < name2.length; i++) { lists.add(new DoubleListBean(name2[i] + 2, i, titles[4])); } for (int i = 0; i < name3.length; i++) { lists.add(new DoubleListBean(name3[i] + 2, i, titles[5])); } for (int i = 0; i < name1.length; i++) { lists.add(new DoubleListBean(name1[i] + 3, i, titles[6])); } for (int i = 0; i < name2.length; i++) { lists.add(new DoubleListBean(name2[i] + 3, i, titles[7])); } for (int i = 0; i < name3.length; i++) { lists.add(new DoubleListBean(name3[i] + 3, i, titles[8])); } for (int i = 0; i < name1.length; i++) { lists.add(new DoubleListBean(name1[i] + 4, i, titles[9])); } for (int i = 0; i < name2.length; i++) { lists.add(new DoubleListBean(name2[i] + 4, i, titles[10])); } for (int i = 0; i < name3.length; i++) { lists.add(new DoubleListBean(name3[i] + 4, i, titles[11])); } for (int i = 0; i < name1.length; i++) { lists.add(new DoubleListBean(name1[i] + 5, i, titles[12])); } for (int i = 0; i < name2.length; i++) { lists.add(new DoubleListBean(name2[i] + 5, i, titles[13])); } for (int i = 0; i < name3.length; i++) { lists.add(new DoubleListBean(name3[i] + 5, i, titles[14])); } } private void initView() { //左邊 leftAdapter = new LeftAdapter(this); lvLeft.setAdapter(leftAdapter); //右邊 PinnedAdapter rightAdapter = new PinnedAdapter(this); // 將資料來源傳遞給Listview rightAdapter.updateData(lists); lvRight.setAdapter(rightAdapter); //設定頭部的條目 lvRight.setPinnedHeaderView(getHeaderView()); } private View getHeaderView() { //頭部是個TextView,不能用view.inflate載入佈局,會測量不出寬高 TextView itemView = new TextView(this); itemView.setLayoutParams(new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 70)); itemView.setGravity(Gravity.CENTER); itemView.setBackgroundColor(getResources().getColor(R.color.green)); itemView.setTextSize(18); itemView.setTextColor(Color.BLACK); itemView.setPadding(0, 0, 0, itemView.getPaddingBottom()); return itemView; } private void initListener() { //右邊是滾動監聽 lvRight.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView absListView, int i) { } @Override public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount) { //滾動確定替換條目 lvRight.configureHeaderView(firstVisibleItem); //獲取到第一個條目的型別 String title = lists.get(firstVisibleItem).getTitle(); //遍歷左邊列表資料集合,獲取到當前型別的索引 for (int i = 0; i < titles.length; i++) { if (titles[i] == title) { position = i; } } //左邊滾動到條目 lvLeft.smoothScrollToPosition(position); //改變選擇的顏色和背景 leftAdapter.changeSelected(position); } }); //左邊的點選監聽 lvLeft.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { for (int j = 0; j < lists.size(); j++) { //左邊當前標題和右邊標題相同時,獲取右邊的索引 if (titles[i] == lists.get(j).getTitle()) { position = j; break; } } //右邊listview選擇當前條目 lvRight.setSelection(position); //左邊文字的顏色和背景 leftAdapter.changeSelected(position); } }); } }
package ouyang.doublelist; /** * Create by oy 2017/7/27 14:14. */ public class DoubleListBean { private String name; private int type;// 型別 後邊要根據型別顯示標題 private String title; public DoubleListBean(String name, int type, String title) { super(); this.name = name; this.type = type; this.title = title; } public DoubleListBean() { super(); } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getType() { return type; } public void setType(int type) { this.type = type; } }
四、感謝和原始碼 原始碼地址:http://download.csdn.net/detail/zhaozhuzi/9914334