ListView悬浮头布局

Hack 26 为LIstView添加分段表头

ListView分条目展示  并且条目头悬浮展示

布局为FrameLayout  下层为ListView 上层为TextView, 其中TextView与item中的分类头一致

public class Hack26Activity extends Activity{


    private TextView mTopHeader; // 悬浮头
    private ListView mListView;
    private int topVisiblePosition = -1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_hack_26);
        mTopHeader = (TextView) findViewById(R.id.header);
        mListView = (ListView) findViewById(R.id.list);
        mListView.setOverScrollMode(View.OVER_SCROLL_NEVER);
        mListView.setAdapter(new SectionAdapter(this, Countries.COUNTRIES));
        mListView.setOnScrollListener(new OnScrollListener() {
            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {

            }

            @Override
            public void onScroll(AbsListView view, int firstVisibleItem,
                                 int visibleItemCount, int totalItemCount) {
                if (firstVisibleItem != topVisiblePosition) {
<span style="white-space:pre">		</span>    // 根据最上面的条目设置悬浮头的文本
                    topVisiblePosition = firstVisibleItem;
                    setTopHeader(firstVisibleItem);
                }
            }
        });
        setTopHeader(0);
    }

    public void setTopHeader(int position) {
        mTopHeader.setText(Countries.COUNTRIES[position].substring(0, 1));
    }
}

class SectionAdapter extends ArrayAdapter<String> {

    private Activity activity;
    public SectionAdapter(Activity activity, String[] objects) {
        super(activity, R.layout.activity_hack_26_item, R.id.label, objects);
        this.activity = activity;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = activity.getLayoutInflater().inflate(R.layout.activity_hack_26_item,
                    parent, false);
        }

        TextView header = (TextView) convertView.findViewById(R.id.header);
        String label = getItem(position);
<span style="white-space:pre">	</span>// 首字母相同分类展示,只显示第一个的分类
        if (position == 0 || getItem(position - 1).charAt(0) != getItem(position).charAt(0)) {
            header.setVisibility(View.VISIBLE);
            header.setText(label.substring(0, 1));
        } else {
            header.setVisibility(View.GONE);
        }
        return super.getView(position, convertView, parent);
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值