AndroidListView 二级联动
2016-11-14 21:24
260 查看
整体的思路: 左边一个listview 右边一个带头StickyListviewHeaders 水平排列 所以在activity_main中 将orientation 设置为horizontal 根据权重进行分布
首先将StickyListHeaders 包导入
XML布局
1, Activity_main
2, MainActivity
3, 左边的listAdapter
4,左边listView item布局
5, 右边StickyListViewAdapter
6, 右边StickyListView item布局
头布局
下方布局
首先将StickyListHeaders 包导入
XML布局
1, Activity_main
<?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:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" tools:context="com.pei.stickyheaderslist.MainActivity"> <ListView android:id="@+id/lv_left" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content"> </ListView> <se.emilsjolander.stickylistheaders.StickyListHeadersListView android:layout_width="0dp" android:layout_weight="3" android:layout_height="wrap_content" android:id="@+id/lv_right"> </se.emilsjolander.stickylistheaders.StickyListHeadersListView> </LinearLayout>
2, MainActivity
package com.pei.stickyheaderslist; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.ListView; import java.util.ArrayList; import se.emilsjolander.stickylistheaders.StickyListHeadersListView; public class MainActivity extends AppCompatActivity { private ListView lvLeft; private StickyListHeadersListView lvRight; private ArrayList<String> head; private ArrayList<String> body; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lvLeft = (ListView) findViewById(R.id.lv_left); lvRight = (StickyListHeadersListView) findViewById(R.id.lv_right); head = new ArrayList<>(); body = new ArrayList<>(); for (int i = 0; i < 500; i++) { head.add("头部内容"+i); body.add("内容"+i); } LeftAdapter leftAdapter = new LeftAdapter(this); RightAdapter rightAdapter = new RightAdapter(this); leftAdapter.setArrayList(head); rightAdapter.setHeadList(head); rightAdapter.setBodyList(body); lvLeft.setAdapter(leftAdapter); lvRight.setAdapter(rightAdapter); lvLeft.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { lvRight.setSelection(i); } }); lvRight.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView absListView, int i) { } @Override public void onScroll(AbsListView absListView, int i, int i1, int i2) { lvLeft.smoothScrollToPositionFromTop(i,0); } }); } }
3, 左边的listAdapter
package com.pei.stickyheaderslist; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import java.util.ArrayList; /** * Created by dllo on 16/11/14. */ public class LeftAdapter extends BaseAdapter { private ArrayList<String> arrayList; private Context mContext; public LeftAdapter(Context mContext) { this.mContext = mContext; } public void setArrayList(ArrayList<String> arrayList) { this.arrayList = arrayList; notifyDataSetChanged(); } @Override public int getCount() { return arrayList == null ? 0 : arrayList.size(); } @Override public Object getItem(int i) { return arrayList == null ? null : arrayList.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup viewGroup) { ViewHolder viewHolder = null; if (view == null){ view = LayoutInflater.from(mContext).inflate(R.layout.item_left,viewGroup,false); viewHolder = new ViewHolder(view); view.setTag(viewHolder); }else{ viewHolder = (ViewHolder) view.getTag(); } viewHolder.tv.setText(arrayList.get(i)); return view; } class ViewHolder{ private TextView tv; public ViewHolder(View view) { tv = (TextView) view.findViewById(R.id.tv_left); } } }
4,左边listView item布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv_left"/> </LinearLayout>
5, 右边StickyListViewAdapter
package com.pei.stickyheaderslist; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import java.util.ArrayList; import se.emilsjolander.stickylistheaders.StickyListHeadersAdapter; /** * Created by dllo on 16/11/14. */ public class RightAdapter extends BaseAdapter implements StickyListHeadersAdapter{ private Context mContext; private ArrayList<String> headList, bodyList; public RightAdapter(Context mContext) { this.mContext = mContext; } public void setHeadList(ArrayList<String> headList) { this.headList = headList; notifyDataSetChanged(); } public void setBodyList(ArrayList<String> bodyList) { this.bodyList = bodyList; notifyDataSetChanged(); } @Override public View getHeaderView(int position, View convertView, ViewGroup parent) { HeadViewHolder headViewHolder = null; if (convertView == null){ convertView = LayoutInflater.from(mContext).inflate(R.layout.item_right_head,parent,false); headViewHolder = new HeadViewHolder(convertView); convertView.setTag(headViewHolder); } else { headViewHolder = (HeadViewHolder) convertView.getTag(); } headViewHolder.tvRightHeader.setText(headList.get(position)); return convertView; } @Override public long getH aba3 eaderId(int position) { return position; } @Override public int getCount() { return headList == null ? 0 : headList.size(); } @Override public Object getItem(int i) { return bodyList == null ? null : bodyList.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup viewGroup) { BodyViewHolder bodyViewHolder =null; if (view == null){ view = LayoutInflater.from(mContext).inflate(R.layout.item_right_body,viewGroup,false); bodyViewHolder = new BodyViewHolder(view); view.setTag(bodyViewHolder); } else { bodyViewHolder = (BodyViewHolder) view.getTag(); } bodyViewHolder.tvRightBody.setText(bodyList.get(i)); return view; } class HeadViewHolder { private TextView tvRightHeader; public HeadViewHolder(View convertView) { tvRightHeader = (TextView) convertView.findViewById(R.id.tv_right_head); } } class BodyViewHolder{ private TextView tvRightBody; public BodyViewHolder(View view) { tvRightBody = (TextView) view.findViewById(R.id.tv_right_body); } } }
6, 右边StickyListView item布局
头布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@color/colorPrimary" android:id="@+id/tv_right_head"/> </LinearLayout>
下方布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv_right_body" android:text="内容"/> </LinearLayout>
相关文章推荐
- android 联动listview 的一种不太健康的实现方式
- android二级listview列表
- Android学习小Demo(21)ListView的联动选择
- 第22章、OnItemSelectedListener事件与二级联动(从零开始学Android)
- 用ExpandableListView做省市二级联动 推荐
- Android练习——Spinner二级联动_城市选择
- android Spinner实现一个二级联动的下拉列表,选定省份后,城市的下拉列表出现相应变化
- Android联动ListView的实现
- android二级listview列表
- Android联动ListView的实现
- Android:如何在ListView中嵌套ListView (如何实现二级目录结构?)的两种实现方式
- android中利用实现二级联动的效果
- android二级listview列表
- Android开发实现二级联动下拉列表
- Android 仿iPhone ListView拖动排序 按钮联动删除显示隐藏
- 第22章、OnItemSelectedListener事件与二级联动(从零开始学Android)
- android 二级listview菜单。类似QQ的好友显示
- Android实现导航菜单随着ListView联动,当导航菜单遇到顶部菜单时停止在哪里,并且listview仍能滑动
- 第22章、OnItemSelectedListener事件与二级联动(从零开始学Android)
- android二级listview列表