欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android 仿京东侧滑筛选实例代码

程序员文章站 2023-11-11 09:06:34
简单介绍 这个demo写的是仿京东的侧滑筛选页面,点击进入筛选后进入二级筛选,两次侧滑的筛选,还包括listview+checkbox滑动冲突,listview+ g...

简单介绍

这个demo写的是仿京东的侧滑筛选页面,点击进入筛选后进入二级筛选,两次侧滑的筛选,还包括listview+checkbox滑动冲突,listview+ gridview显示一行问题解决,接口回调传递数据等

效果图

Android 仿京东侧滑筛选实例代码

Android 仿京东侧滑筛选实例代码

简单得代码介绍

1.首页侧滑用的是安卓官方v4包中的drawerlayout

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.drawerlayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/drawer_layout"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:fitssystemwindows="true">

  <framelayout
    android:id="@+id/main_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitssystemwindows="true">

    <textview
      android:id="@+id/screentv"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_gravity="center|top"
      android:layout_margintop="200dp"
      android:text="仿京东筛选"
      android:textsize="20sp" />
  </framelayout>

  <linearlayout
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="end"
    android:fitssystemwindows="true"
    android:orientation="vertical" />

</android.support.v4.widget.drawerlayout>

2.一级页面是自定义的layout,作为drawerlayout的侧滑页面添加进去

menuheaderview = new rightsidesliplay(screeningactivity.this);
navigationview.addview(menuheaderview);

发现的一个小的技巧想要侧滑不随滑动而滑动,只能点击才出现侧滑的话,可以先锁定
drawer.setdrawerlockmode(drawerlayout.lock_mode_locked_closed, gravity.right);这样就不一直跟着手势侧滑了

3.一级界面 listview嵌套gridview,gridview得做自设配高度的自定义,不然只能显示一行,具体参源码automeasureheightgridview这个类

4.接下来是解析数据绑定数据了,还算比较简单。定义模型类,京东的筛选默认每项显示数据3个即一行。我现在默认的是都是关闭的,只有第一项是打开的,默认显现9个即3行,点击查看更多就能进入下一级页面。参看图二

5.二级页面是一个popupwindow,设置了popupwindow的位置和动画达到,也能像一级界面也样,右边侧滑出来,点击侧滑收回去的效果。

/**

 * 创建popupwindow
 */
private popupwindow mmenupop;
public rightsideslipchildlay mdownmenu;

protected void initpopuptwindow(list<attrlist.attr.vals> mselectdata) {
  mdownmenu = new rightsideslipchildlay(getcontext(), valsdata, mselectdata);
  if (mmenupop == null) {
    mmenupop = new popupwindow(mdownmenu, linearlayout.layoutparams.fill_parent, linearlayout.layoutparams.fill_parent);
  }
  mmenupop.setbackgrounddrawable(new bitmapdrawable());
  mmenupop.setanimationstyle(r.style.popupwindowanimright);
  mmenupop.setfocusable(true);
  mmenupop.showatlocation(rightsidesliplay.this, gravity.top, 100, uiutils.getstatusbarheight(mctx));
  mmenupop.setondismisslistener(new popupwindow.ondismisslistener() {

    @override
    public void ondismiss() {
      dismissmenupop();
    }
  });
}

此页面是一个listview里包含checkbox,对于checkbox滑动选中错位的问题在这个demo中也有解决,此法一本万利。可以下载demo来参考。大体思路是checkbox选中的状态对象的存在需要显示的对象里,设置对象的一个属性,记录checkbox选中的状态。

6.对于页面件数据的传递使用的接口回调。包括adapter数据操作的传出和一级页面传入二级页面,二级页面在回传给一级页面显示。一级页面在传出给主页面(这个没有写)也可以用其他数据传递的方式,这只是方法之一。

7.项目下载地址:androidscreening_jb51.rar

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。