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>
浙公网安备 33010602011771号