listview左右联动滑动

1.fragment

package com.setbuy.fragment;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.setbuy.activity.NewCarActivity;
import com.setbuy.activity.R;
import com.setbuy.adapter.NewHomeAdapter;
import com.setbuy.adapter.NewMenuAdapter;
import com.setbuy.dao.GoodDao;
import com.setbuy.dao.SetParamDao;
import com.setbuy.model.NewCategory;
import com.setbuy.model.banner;
import com.setbuy.utils.CarDialogUtils;
import com.setbuy.utils.MessgeUtil;
import com.setbuy.utils.NetWork;
import com.setbuy.utils.SystemBarTintManager;
import com.setbuy.utils.T;
import com.squareup.picasso.Picasso;
import com.squareup.picasso.Target;
import com.squareup.picasso.Picasso.LoadedFrom;
import come.setbuy.view.CustomProgressDialog;

import android.annotation.TargetApi;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.view.ViewGroup.LayoutParams;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.Toast;

public class NewGoodCategoryFragment extends Fragment {

    private Context context;
    private View newcatelayout;
    public SharedPreferences mPreferences;

    private ListView lv_menu;//
    private ListView lv_home;//
    private NewMenuAdapter menuAdapter;
    private NewHomeAdapter homeAdapter;

    private Map<String, String> ResMap;
    private List<NewCategory> newCateGoryList;
    private int currentItem;
    
    public Dialog carDialogUtils;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); 
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        
        View view = inflater
                .inflate(R.layout.newgoodcategory, container, false);
        newcatelayout = (View) view.findViewById(R.id.newcatelayout);
        context = view.getContext();
        carDialogUtils = CarDialogUtils.createLoadingDialog(getActivity(), "数据加载中...");
        initTopBar();// 头标题
        initView(view);
        doGoodCategory();
        return view;
    }

    public void initView(View view) {
        lv_menu = (ListView) view.findViewById(R.id.lv_menu);
        lv_home = (ListView) view.findViewById(R.id.lv_home);
    }

    private void doGoodCategory() {
        
        new Thread(new Runnable() {
            @Override
            public void run() {
                Message msg = categoryHandler.obtainMessage();
                msg.what = 1;
                ResMap = GoodDao.goodNewCategory();
                categoryHandler.sendMessage(msg);
            }
        }).start();
    }

    Handler categoryHandler = new Handler() {
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
            case 0:
                break;
            case 1:
                try{
                    String newMsg = SetParamDao.mapGetByKey(ResMap, "tree");

                    Gson gson = new Gson();
                    newCateGoryList = new ArrayList<NewCategory>();
                    Type type = new TypeToken<ArrayList<NewCategory>>() {
                    }.getType();
                    newCateGoryList = gson.fromJson(newMsg, type);

                    menuAdapter = new NewMenuAdapter(getActivity(), newCateGoryList);
                    lv_menu.setAdapter(menuAdapter);
                    lv_menu.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                        @Override
                        public void onItemClick(AdapterView<?> parent, View view,
                                final int position, long id) {
                            menuAdapter.setSelectItem(position);
                            menuAdapter.notifyDataSetInvalidated();
                            lv_home.smoothScrollToPositionFromTop (position,0);
                        }
                    });

                    homeAdapter = new NewHomeAdapter(getActivity(), newCateGoryList);
                    lv_home.setAdapter(homeAdapter);
                    lv_home.setOnScrollListener(new AbsListView.OnScrollListener() {
                        private int scrollState;

                        @Override
                        public void onScrollStateChanged(AbsListView view, int scrollState) {
                            this.scrollState = scrollState;
                        }

                        @Override
                        public void onScroll(AbsListView view, int firstVisibleItem,
                                             int visibleItemCount, int totalItemCount) {
                            if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {
                                return;
                            }
                            if (currentItem != firstVisibleItem && firstVisibleItem >= 0) {
                                currentItem = firstVisibleItem;
                                menuAdapter.setSelectItem(currentItem);
                                menuAdapter.notifyDataSetInvalidated();
                           
                                lv_menu.smoothScrollToPositionFromTop(currentItem,0);
                            }
                        }
                    });
                    CarDialogUtils.closeDialog(carDialogUtils);// 关掉diolog
                }catch (Exception e) {
                    e.printStackTrace();
                    CarDialogUtils.closeDialog(carDialogUtils);// 关掉diolog
                }
                break;
            default:
                break;
            }
        }
    };

    public void initTopBar() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            // 设置顶部高度
            int height = getStatusBarHeight();
            LayoutParams para = newcatelayout.getLayoutParams();
            int heigh = para.height;
            para.height = heigh + height;
            newcatelayout.setLayoutParams(para);
            newcatelayout.setPadding(0, height, 0, 0);
            setTranslucentStatus(true);
            mPreferences = getActivity().getSharedPreferences(
                    T.Users.SHARE_CONFIG, Context.MODE_PRIVATE);
            Picasso.with(getActivity())
                    .load(mPreferences.getString(T.App.TopBg, ""))
                    .placeholder(R.drawable.main_top).into(new Target() {
                        @Override
                        public void onPrepareLoad(Drawable arg0) {

                        }

                        @Override
                        public void onBitmapLoaded(Bitmap bitmap,
                                LoadedFrom arg1) {
                            newcatelayout.setBackground(new BitmapDrawable(
                                    bitmap));
                        }

                        @Override
                        public void onBitmapFailed(Drawable arg0) {

                        }
                    });

        }
        SystemBarTintManager tintManager = new SystemBarTintManager(
                getActivity());
        tintManager.setStatusBarTintEnabled(false);
        tintManager.setStatusBarTintResource(R.color.statusbar_bg);
    }

    // 更改状态栏颜色
    public int getStatusBarHeight() {
        int result = 0;
        int resourceId = getResources().getIdentifier("status_bar_height",
                "dimen", "android");
        if (resourceId > 0) {
            result = getResources().getDimensionPixelSize(resourceId);
        }
        return result;
    }

    @TargetApi(19)
    private void setTranslucentStatus(boolean on) {
        Window win = ((Activity) context).getWindow();
        WindowManager.LayoutParams winParams = win.getAttributes();
        final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
        if (on) {
            winParams.flags |= bits;
        } else {
            winParams.flags &= ~bits;
        }
        win.setAttributes(winParams);
    }
    @Override
    public void onResume() {
        super.onResume();
    }
}

布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <RelativeLayout
        android:id="@+id/newcatelayout"
        android:layout_width="match_parent"
        android:layout_height="45dip"
        android:background="@drawable/btn_background" >

        <TextView
            android:id="@+id/new_tv_title_bar_tb"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:gravity="center"
            android:text="商品分类"
            android:textColor="@color/white"
            android:textSize="18sp"
            android:textStyle="bold" />
    </RelativeLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:baselineAligned="false"
        android:orientation="horizontal" >

        <ListView
            android:id="@+id/lv_menu"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:scrollbars="none"
            android:listSelector="#00000000"
            android:layout_weight="1"
            android:background="#EDECEC" />

        <RelativeLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="3"
            android:background="@color/white" >

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent" >

                <ListView
                    android:id="@+id/lv_home"
                    android:scrollbars="none"
                    android:background="@null"
                    android:listSelector="#00000000"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" />
            </LinearLayout>
        </RelativeLayout>
    </LinearLayout>

</LinearLayout>

左联动代码布局

NewMenuAdapter

package com.setbuy.adapter;

import java.util.List;

import com.setbuy.activity.R;
import com.setbuy.model.NewCategory;

import android.content.Context;
import android.graphics.Color;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;

public class NewMenuAdapter extends BaseAdapter {
    private Context context;
    private int selectItem = 0;
    private List<NewCategory> newCateGoryList;

    public NewMenuAdapter(Context context, List<NewCategory> newCateGoryList) {
        this.newCateGoryList = newCateGoryList;
        this.context = context;
    }

    public int getSelectItem() {
        return selectItem;
    }

    public void setSelectItem(int selectItem) {
        this.selectItem = selectItem;
    }

    @Override
    public int getCount() {
        return newCateGoryList.size();
    }

    @Override
    public Object getItem(int position) {
        return newCateGoryList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        if (convertView == null) {
            holder = new ViewHolder();
            convertView = View.inflate(context, R.layout.new_item_menu, null);
            holder.tv_name = (TextView) convertView
                    .findViewById(R.id.item_name);
            holder.view_red = (View) convertView.findViewById(R.id.view_red);
            holder.ll_menu = (LinearLayout)convertView.findViewById(R.id.ll_menu);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        if (position == selectItem) {
            holder.view_red.setVisibility(View.VISIBLE);
            holder.ll_menu.setBackgroundColor(Color.WHITE);
            
        } else {
            holder.view_red.setVisibility(View.GONE);
            holder.ll_menu.setBackgroundColor(Color.parseColor("#F2F2F2"));
        }
        holder.tv_name.setText(newCateGoryList.get(position).getLabel());
        return convertView;
    }

    static class ViewHolder {
        private TextView tv_name;
        private View view_red;
        private LinearLayout ll_menu;
    }

}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ll_menu"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <View
        android:id="@+id/view_red"
        android:layout_width="3dp"
        android:layout_height="40dp"
        android:layout_gravity="center_horizontal"
        android:background="#FA5A3A"
        android:gravity="left"
        android:visibility="gone" />

    <TextView
        android:id="@+id/item_name"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:gravity="center"
        android:text=""
        android:textSize="14sp" />

</LinearLayout>

右联动布局代码

listview里包含gridview

package com.setbuy.adapter;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.content.Context;
import android.content.Intent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.setbuy.activity.NewCarActivity;
import com.setbuy.activity.NewSearchActivity;
import com.setbuy.activity.ProShopListActivity;
import com.setbuy.activity.R;
import com.setbuy.dao.SetParamDao;
import com.setbuy.model.NewCategory;
import com.setbuy.utils.IsHtmlOrProto;
import com.setbuy.utils.T;
import com.squareup.picasso.Picasso;

public class NewHomeAdapter extends BaseAdapter {
    private Context context;
    private List<NewCategory> newCateGoryList;

    public NewHomeAdapter(Context context, List<NewCategory> newCateGoryList) {
        this.context = context;
        this.newCateGoryList = newCateGoryList;
    }

    @Override
    public int getCount() {
        if (newCateGoryList != null) {
            return newCateGoryList.size();
        } else {
            return 10;
        }
    }

    @Override
    public Object getItem(int position) {
        return newCateGoryList.size();
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        ViewHold holder = null;
        if (convertView == null) {
            convertView = View.inflate(context, R.layout.new_item_home, null);
            holder = new ViewHold();
            holder.iv_picture = (ImageView) convertView
                    .findViewById(R.id.iv_picture);
            holder.blank = (TextView) convertView.findViewById(R.id.blank);
            holder.gridView = (come.setbuy.view.GridViewForScrollView) convertView
                    .findViewById(R.id.gridView);
            holder.ll_head = (LinearLayout) convertView
                    .findViewById(R.id.ll_head);
            convertView.setTag(holder);
        } else {
            holder = (ViewHold) convertView.getTag();
        }

        if (newCateGoryList.get(position).getSub() == null) {// 如果有某个为空
            holder.ll_head.setVisibility(View.GONE);
            holder.gridView.setVisibility(View.GONE);
        } else {
            holder.ll_head.setVisibility(View.VISIBLE);
            holder.gridView.setVisibility(View.VISIBLE);
            Picasso.with(context).load(newCateGoryList.get(position).getImg()).error(R.drawable.alt2).placeholder(R.drawable.alt2)
                    .into(holder.iv_picture);
            holder.blank.setText(newCateGoryList.get(position).getLabel());
            HomeItemAdapter adapter = new HomeItemAdapter(context,
                    newCateGoryList.get(position).getSub());
            holder.gridView.setAdapter(adapter);
        }
        //点击事件 标题
        holder.ll_head.setOnClickListener(new OnClickListener() {    
            @Override
            public void onClick(View arg0) {    
                Map<String,String> map = new HashMap<String, String>();
                map.put("CatID",newCateGoryList.get(position).getCat_id());
                map.put("KeyWords","");
                IsHtmlOrProto.JunpPreferceActivity(context,NewSearchActivity.class,map);
            }
        });

        return convertView;
    }

    private static class ViewHold {
        private ImageView iv_picture;
        private TextView blank;
        private come.setbuy.view.GridViewForScrollView gridView;
        private LinearLayout ll_head;
    }

}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:id="@+id/ll_head"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <ImageView
            android:id="@+id/iv_picture"
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:layout_gravity="center_vertical"
            android:layout_marginLeft="10dp"
            android:src="@drawable/picture2" />

        <TextView
            android:id="@+id/blank"
            android:layout_width="wrap_content"
            android:layout_height="35dp"
            android:gravity="center_vertical"
            android:paddingLeft="5dp"
            android:text="查看一下" />
    </LinearLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="#F3F3F3" />

    <come.setbuy.view.GridViewForScrollView
        android:id="@+id/gridView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:listSelector="#00000000"
        android:numColumns="3" />

     <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="5dp"
        android:background="#F3F3F3" />
</LinearLayout>

 

package com.setbuy.adapter;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.setbuy.activity.NewSearchActivity;
import com.setbuy.activity.ProShopListActivity;
import com.setbuy.activity.R;
import com.setbuy.model.NewCategory;
import com.setbuy.model.NewCategory.Sub;
import com.setbuy.utils.IsHtmlOrProto;
import com.setbuy.utils.T;
import com.squareup.picasso.Picasso;

import android.content.Context;
import android.content.Intent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class HomeItemAdapter extends BaseAdapter {
    private Context context;
    private List<Sub> subList;

    public HomeItemAdapter(Context context,
            List<Sub> list) {
        this.context = context;
        this.subList = list;
    }

    @Override
    public int getCount() {
        if (subList != null) {
            return subList.size();
        } else {
            return 10;
        }
    }

    @Override
    public Object getItem(int position) {
        return subList.size();
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        ViewHold holder = null;
        if (convertView == null) {
            convertView = View.inflate(context, R.layout.item_home_category,
                    null);
            holder = new ViewHold();
            holder.iv_item_album = (ImageView)convertView.findViewById(R.id.iv_item_album);
            holder.tv_item_home_name = (TextView)convertView.findViewById(R.id.tv_item_home_name);
            holder.ll_grid = (LinearLayout)convertView.findViewById(R.id.ll_grid);
            convertView.setTag(holder);
        } else {
            holder = (ViewHold) convertView.getTag();
        }

        Picasso.with(context).load(subList.get(position).getImg()).error(R.drawable.alt2).placeholder(R.drawable.alt2).into(holder.iv_item_album);
        holder.tv_item_home_name.setText(subList.get(position).getLabel());
        
        //grid点击事件
        holder.ll_grid.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {    
                Map<String,String> map = new HashMap<String, String>();
                map.put("CatID",subList.get(position).getCat_id());
                map.put("KeyWords","");
                IsHtmlOrProto.JunpPreferceActivity(context,NewSearchActivity.class,map);
            }
        });
        return convertView;

    }

    private static class ViewHold {
        private ImageView iv_item_album;
        private TextView tv_item_home_name;
        private LinearLayout ll_grid;
    }

}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:padding="10dp">

    <LinearLayout
        android:id="@+id/ll_grid"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <ImageView
            android:id="@+id/iv_item_album"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:layout_gravity="center_horizontal"
            android:scaleType="centerCrop" />

        <TextView
            android:id="@+id/tv_item_home_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:gravity="center"
            android:singleLine="true"
            android:text=""
            android:textSize="12dp" />
    </LinearLayout>

</LinearLayout>

 

posted on 2018-04-02 10:18  爱学习的亮亮  阅读(895)  评论(0)    收藏  举报

导航