双ListView显示数据
2016-03-15 16:39
363 查看
双ListView显示数据,宽度各占一半,高度不定形成错位视觉 Bug: 1、偶尔不能滑动 不足: 1、滑动到底部时不能继续同步滑动 2、没有下拉刷新和上拉加载功能 以下是核心代码
package com.zoipuus.doublelistview.views; import android.content.Context; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.LinearLayout; import android.widget.ListView; import com.zoipuus.doublelistview.R; /** * Created by zoipuus on 2016/3/13. * double listView */ public class DoubleListView extends LinearLayout { private OnItemClickListener listener; private ListView listLeft; private ListView listRight; public DoubleListView(Context context) { this(context, null); } public DoubleListView(Context context, AttributeSet attrs) { super(context, attrs); setupViews(context); } public void setAdapters(BaseAdapter adapter1, BaseAdapter adapter2) { listLeft.setAdapter(adapter1); listRight.setAdapter(adapter2); setListViewOnTouchAndScrollListener(listLeft, listRight); } private void setupViews(Context context) { LayoutInflater.from(context).inflate(R.layout.list_view_double, this); listLeft = (ListView) findViewById(R.id.list_left); listRight = (ListView) findViewById(R.id.list_right); } private void setOnItemClickListener(ListView listLeft, ListView listRight) { setOnItemClickListener(listLeft); setOnItemClickListener(listRight); } private void setOnItemClickListener(ListView listView) { listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (listener != null) { listener.onItemClick(parent, view, position, id); } } }); } private void setListViewOnTouchAndScrollListener(ListView listLeft, ListView listRight) { setScrollListener(listLeft, listRight); setScrollListener(listRight, listLeft); } private void setScrollListener(final ListView listView1, final ListView listView2) { listView1.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { View subView = view.getChildAt(0); if (subView != null) { final int top = subView.getTop(); if (listView2.getChildAt(0) != null) { final int firstVisibleItem = view.getFirstVisiblePosition(); if (top > 0) { listView2.scrollTo(0, -top); } else { listView1.setSelectionFromTop(firstVisibleItem, top); listView2.setSelectionFromTop(firstVisibleItem, top); } } } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { View subView = view.getChildAt(0); if (subView != null) { final int top = subView.getTop(); if (listView2.getChildAt(0) != null) { if (top > 0) { listView2.scrollTo(0, -top); } else { listView1.setSelectionFromTop(firstVisibleItem, top); listView2.setSelectionFromTop(firstVisibleItem, top); } } } } }); } public void setListener(OnItemClickListener listener) { setOnItemClickListener(listLeft, listRight); this.listener = listener; } public interface OnItemClickListener { /** * @param parent listView * @param view Item * @param position position of item int the listView * @param id position of the adapter */ void onItemClick(AdapterView<?> parent, View view, int position, long id); } }
相关文章推荐
- 完美实现Android ListView中的TextView的跑马灯效果
- android上改变listView的选中颜色
- Delphi7中Listview的常用功能汇总
- Delphi控件ListView的属性及使用方法详解
- android中ListView数据刷新时的同步方法
- Android提高之ListView实现自适应表格的方法
- Android中实现水平滑动(横向滑动)ListView示例
- C#实现ListView选中项向上或向下移动的方法
- Listview加载的性能优化是如何实现的
- C#实现listview Group收缩扩展的方法
- C# listview添加combobox到单元格的实现代码
- ListView 百分比进度条(delphi版)
- Android listview多视图嵌套多视图
- ListView Adapter优化 实例
- Android用ListView显示SDCard文件列表的小例子
- Adapter实现ListView带多选框等状态的自定义控件的注意事项
- asp.net ListView 数据绑定
- Android之ScrollView嵌套ListView和GridView冲突的解决方法
- android ListView和ProgressBar(进度条控件)的使用方法
- Android实现ListView异步加载图片的方法