package com.example.huadongct;
import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import java.util.ArrayList;
import se.emilsjolander.stickylistheaders.StickyListHeadersAdapter;
import se.emilsjolander.stickylistheaders.StickyListHeadersListView;
/**
-
A simple {@link Fragment} subclass.
*/
public class GoodsFragment extends Fragment implements AdapterView.OnItemClickListener, AbsListView.OnScrollListener {private ListView lv;
private StickyListHeadersListView shl;
private ImageView iv_cart;
private TextView fragment_goods_tv_count;
private RelativeLayout cart;
private HeadAdapter headAdapter;
private GroupAdapter groupAdapter;@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View inflate = inflater.inflate(R.layout.fragment_goods, container, false);
initView(inflate);
return inflate;
}private void initView(View inflate) {
lv = (ListView) inflate.findViewById(R.id.lv);
shl = (StickyListHeadersListView) inflate.findViewById(R.id.shl);
iv_cart = (ImageView) inflate.findViewById(R.id.iv_cart);
fragment_goods_tv_count = (TextView) inflate.findViewById(R.id.fragment_goods_tv_count);
cart = (RelativeLayout) inflate.findViewById(R.id.cart);
}@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
testData();
headAdapter = new HeadAdapter();
lv.setAdapter(headAdapter);groupAdapter = new GroupAdapter(); shl.setAdapter(groupAdapter); lv.setOnItemClickListener(this); shl.setOnScrollListener(this);
}
/左侧–头信息的点击事件/
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
headAdapter.setSelectPosition(position);
Head head = heads.get(position);
shl.setSelection(head.groupFirstIndex);
isScroll = false;
}
/右侧–分组信息的滚动事件
boolean isScroll = false;
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
//这个方法触发才代表用户的滚动
isScroll = true;}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
//右侧分组信息滚动,左侧对应的头信息高亮处理
if (isScroll) {
Data data = datas.get(firstVisibleItem);
headAdapter.setSelectPosition(data.headIndex);//判断头容器是否处于可见状态 //获取到第一个和最后一个可见的,比第一个小或比最后一个大的均为不可见 int firstVisiblePosition = lv.getFirstVisiblePosition(); int lastVisiblePosition = lv.getLastVisiblePosition(); if (data.headIndex >= lastVisiblePosition || data.headIndex <= firstVisiblePosition) { lv.setSelection(data.headIndex);//可见处理 } }
}
private ArrayList heads = new ArrayList<>();
class Head {
String info;
int groupFirstIndex;
}
private ArrayList datas = new ArrayList<>();class Data {
public String info;
int headId;
int headIndex;
}private void testData() {
for (int i = 0; i < 10; i++) {
Head head = new Head();
head.info = “头” + i;
heads.add(head);for (int j = 0; j < 10; j++) { Data data = new Data(); data.info = "普通条目" + j; data.headId = i; data.headIndex = i; if (j == 0) { head.groupFirstIndex = datas.size(); } datas.add(data); } }
}
/右侧–分组信息的适配器/
private class GroupAdapter extends BaseAdapter implements StickyListHeadersAdapter {@Override public View getHeaderView(int position, View convertView, ViewGroup parent) { int headIndex = datas.get(position).headIndex; Head head = heads.get(headIndex); TextView textView = new TextView(getContext()); textView.setText(head.info); textView.setTextColor(Color.BLACK); textView.setBackgroundColor(Color.parseColor("#BFBFBF")); return textView; } @Override public long getHeaderId(int position) { return datas.get(position).headId; } @Override public int getCount() { return datas.size(); } @Override public Object getItem(int position) { return datas.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { TextView textView = new TextView(getContext()); textView.setText(datas.get(position).info); textView.setTextColor(Color.BLACK); return textView; }
}
//左侧头信息–ListView的adapter///
private class HeadAdapter extends BaseAdapter {
private int selectPosition;@Override public int getCount() { return heads.size(); } @Override public Object getItem(int position) { return heads.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { TextView textView = new TextView(getContext()); textView.setText(heads.get(position).info); textView.setLayoutParams(new ListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 100)); textView.setGravity(Gravity.CENTER); textView.setTextSize(16); textView.setTextColor(Color.BLACK); if (position == selectPosition) { textView.setBackgroundColor(Color.WHITE); } else { textView.setBackgroundColor(Color.parseColor("#BFBFBF")); } return textView; } public void setSelectPosition(int selectPosition) { if (this.selectPosition == selectPosition) { return; } this.selectPosition = selectPosition; notifyDataSetChanged(); }
}
}