二级缓存 实现双列表

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

    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值