双ListView显示数据

双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);
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zoipuus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值