Android筛选功能(侧滑)

这篇博客展示了如何在Android应用中实现一个简单的侧滑筛选效果。通过MainActivity的布局和代码,包括一个按钮,利用PopupWindows和自定义适配器来完成筛选功能。作者还提供了一个Classify类的相关代码,并分享了项目的完整模块下载链接,欢迎读者指出可能存在的问题和错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近乍一想,想做个简单的筛选效果,如下就是效果图

这里写图片描述

筛选两个字没显示完全,可能是模拟器问题 ,我在自己的机子上运行了不是这样。

MainActivity布局就一个按钮没啥说的。
贴上MainActivity的代码。部分代码写上了注释:

public class MainActivity extends AppCompatActivity {


    // 声明PopupWindow对象的引用
    private PopupWindow popupWindow;
    //分类的gridview
    private GridView gridView1;
    //产地的gridview
    private GridView gridView2;
    //popupWindow的布局view
    private View popupWindow_view;
    private List<Classify> classifyList;
    private List<Classify> producingList;
    private GridviewAdapter mydapter;
    private GridviewAdapter mydapter2;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //向分类集合中 添加假数据
        classifyList = new ArrayList<>();
        classifyList.add(new Classify("全部"));
        classifyList.add(new Classify("分类A"));
        classifyList.add(new Classify("分类B"));
        classifyList.add(new Classify("分类C"));
        classifyList.add(new Classify("分类D"));

        //向产地集合中 添加假数据
        producingList = new ArrayList<>();
        producingList.add(new Classify("全部"));
        producingList.add(new Classify("产地A"));
        producingList.add(new Classify("产地B"));
        producingList.add(new Classify("产地C"));
        producingList.add(new Classify("产地D"));
        producingList.add(new Classify("产地E"));
        producingList.add(new Classify("产地F"));
        producingList.add(new Classify("产地G"));
        producingList.add(new Classify("产地H"));
    }

    /**
     * 点击筛选弹出菜单
     *
     * @param view
     */
    public void click(View view) {
        //创建popupwindow
        getPopupWindow();
        // 这里是位置显示方式,在屏幕的右侧
        popupWindow.showAtLocation(view, Gravity.RIGHT, 0, 0);
    }

    //在这获取popupwindow的实例
    private void getPopupWindow() {
        if (null != popupWindow) {
            popupWindow.dismiss();
            return;
        } else {
            initPopuptWindow();
        }
    }

    /**
     * 创建 PopuptWindow的实例
     */
    public void initPopuptWindow() {
        popupWindow_view = View.inflate(this, R.layout.popupwindow_right, null);
        // 创建PopupWindow实例,LayoutParams.WRAP_CONTENT,LayoutParams.MATCH_PARENT分别是宽度和高度
        popupWindow = new PopupWindow(popupWindow_view, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT, true);
        // 设置动画效果
        popupWindow.setAnimationStyle(R.style.AnimationFade);

        gridView1 = (GridView) popupWindow_view.findViewById(R.id.gridview1);
        gridView2 = (GridView) popupWindow_view.findViewById(R.id.gridview2);
        Button btnOk = (Button) popupWindow_view.findViewById(R.id.btn_ok);
        Button btnCancal = (Button) popupWindow_view.findViewById(R.id.btn_cancal);

        btnOk.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String str = "";
                String str2 = "";
                //取出选中的属性
                for (int i = 0; i < classifyList.size(); i++) {
                    if (classifyList.get(i).isChecked()) {
                        str = classifyList.get(i).getStr();
                    }
                }
                //取出选中的属性
                for (int i = 0; i < producingList.size(); i++) {
                    if (producingList.get(i).isChecked()) {
                        str2 = producingList.get(i).getStr();
                    }
                }
                Toast.makeText(MainActivity.this, str + str2, Toast.LENGTH_SHORT).show();
                //关闭popupWindow
                if (popupWindow != null && popupWindow.isShowing()) {
                    popupWindow.dismiss();
                    popupWindow = null;
                }
            }
        });

        btnCancal.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                for (int i = 0; i < classifyList.size(); i++) {
                    classifyList.get(i).setChecked(false);
                }
                for (int i = 0; i < producingList.size(); i++) {
                    producingList.get(i).setChecked(false);
                }
                mydapter.getSaveList().clear();
                mydapter.notifyDataSetChanged();
                mydapter2.notifyDataSetChanged();
            }
        });

        mydapter = new GridviewAdapter(classifyList, MainActivity.this);
        gridView1.setAdapter(mydapter);
        gridView1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                //如果选中就设置非选中。非选中就设置选中
                classifyList.get(position).setChecked(!classifyList.get(position).isChecked());
                //只有一条目选中
                for (int i = 0; i < classifyList.size(); i++) {
                    if (i == position) {
                        continue;
                    }
                    classifyList.get(i).setChecked(false);
                }
                mydapter.notifyDataSetChanged();
            }
        });


        mydapter2 = new GridviewAdapter(producingList, MainActivity.this);
        gridView2.setAdapter(mydapter2);
        gridView2.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                //如果选中就设置非选中。非选中就设置选中
                producingList.get(position).setChecked(!producingList.get(position).isChecked());
                //只有一条目选中
                for (int i = 0; i < producingList.size(); i++) {
                    if (i == position) {
                        continue;
                    }
                    producingList.get(i).setChecked(false);
                }
                mydapter2.notifyDataSetChanged();
            }
        });


        //对popupWindows进行触摸监听
        popupWindow_view.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                boolean b = inRangeOfView(popupWindow_view, event);
                if (b) {
                    return true;
                } else
                    return false;
            }
        });
    }

    /**
     * 用于判断点击范围是否在弹出框内,点击外面就收起popupWindows
     */
    private boolean inRangeOfView(View view, MotionEvent ev) {
        int[] location = new int[2];
        view.getLocationOnScreen(location);
        int x = location[0];
        int y = location[1];
        if (ev.getX() < x || ev.getX() > (x + view.getWidth()) || ev.getY() < y || ev.getY() > (y + view.getHeight())) {
            if (popupWindow != null && popupWindow.isShowing()) {
         
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值