文档章节

Android仿QQ列表滑动弹出按钮、长按提示、刷新列表

MiloMei
 MiloMei
发布于 2015/01/23 11:35
字数 556
阅读 4650
收藏 80

原理:  ScrollView(刷新) + ListView(弹出按钮)

说明:由于能力有限,刷新和滑动弹出按钮都是第三方的library(library_pullToRefresh + library_SwipeMenuListView)  我只是整合了一下,需要的留言。。。

图片:

实现代码:

1》xml:

 <?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">
    <include layout="@layout/top_bar" />
    <LinearLayout
        android:background="@drawable/login_boder_bg"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="10dp"
        android:orientation="vertical">
        <!--刷新 -->
        <com.handmark.pulltorefresh.library.PullToRefreshScrollView
            android:id="@+id/scrollview"
            android:layout_margin="5dp"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_margin="20dp"
                android:orientation="vertical">
                <EditText
                    android:gravity="center"
                    android:layout_width="match_parent"
                    android:layout_height="40dp"
                    android:hint="搜索"
                    android:background="@drawable/login_boder_bg" />
                    <!--弹出按钮 -->
                <com.baoyz.swipemenulistview.SwipeMenuListView
                    android:id="@+id/swipe_menu_listview"
                    android:layout_marginTop="10dp"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" />
            </LinearLayout>
        </com.handmark.pulltorefresh.library.PullToRefreshScrollView>
    </LinearLayout>
</LinearLayout>

2》java:这里只贴出核心代码:

        //设置ListView的高度--解决只显示一行问题
        setListViewHeight();(http://my.oschina.net/imeibi/blog/370947
        //刷新
        pullToRefresh();
        //创建卡片
        createMenu();
        //加载数据
        getData();

 1.//刷新
/**
     * 刷新
     */
    private void pullToRefresh() {
        pullToRefreshScrollView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ScrollView>() {
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ScrollView> refreshView) {
                //下拉
                getData();
            }
            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ScrollView> refreshView) {
                //上拉
                Message message2 = handler.obtainMessage(ONREFRESH_COMPLETE_UP);
                handler.sendMessage(message2);
            }
        });
    }
 2.//创建卡片
/**
     * step 1. create a MenuCreator
     */
    private void createMenu() {
        SwipeMenuCreator creator = new SwipeMenuCreator() {
            @Override
            public void create(SwipeMenu menu) {
                // create "open" item
                SwipeMenuItem openItem = new SwipeMenuItem(
                        getApplicationContext());
                // set item background
                openItem.setBackground(new ColorDrawable(Color.rgb(0xC9, 0xC9,
                        0xCE)));
                // set item width
                openItem.setWidth(CommonUtils.dip2px(getApplicationContext(), 90));
                // set item title
                openItem.setTitle("Open");
                // set item title fontsize
                openItem.setTitleSize(18);
                // set item title font color
                openItem.setTitleColor(Color.WHITE);
                // add to menu
                menu.addMenuItem(openItem);
                // create "delete" item
                SwipeMenuItem deleteItem = new SwipeMenuItem(
                        getApplicationContext());
                // set item background
                deleteItem.setBackground(new ColorDrawable(Color.rgb(0xF9,
                        0x3F, 0x25)));
                // set item width
                deleteItem.setWidth(CommonUtils.dip2px(getApplicationContext(), 90));
                // set a icon
                deleteItem.setIcon(R.drawable.ic_delete);
                // add to menu
                menu.addMenuItem(deleteItem);
            }
        };
        // set creator
        swipeMenuListView.setMenuCreator(creator);
        /**
         * step 2. listener item click event
         */
        swipeMenuListView.setOnMenuItemClickListener(new SwipeMenuListView.OnMenuItemClickListener() {
            @Override
            public void onMenuItemClick(int position, SwipeMenu menu, int index) {
                ApplicationInfo item = mAppinfoList.get(position);
                switch (index) {
                    case 0:
                        // open
                        // open(item);
                        showCustomToast("打开第" + position + "个");
                        break;
                    case 1:
                        // delete
                        // delete(item);
                        showCustomToast("删除第" + position + "个");
                        mAppinfoList.remove(position);
                        swipeMenuListAdapter.notifyDataSetChanged();
                        break;
                }
            }
        });
        // set SwipeListener
        swipeMenuListView.setOnSwipeListener(new SwipeMenuListView.OnSwipeListener() {
            @Override
            public void onSwipeStart(int position) {
                // swipe start
            }
            @Override
            public void onSwipeEnd(int position) {
                // swipe end
            }
        });
        // other setting
//  listView.setCloseInterpolator(new BounceInterpolator());
        // test item long click
        swipeMenuListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view,
                                           int position, long id) {
                showCustomToast("长按想干嘛...");
                return false;
            }
        });
    }
3. //加载数据
public void getData() {
        Message infoMessage = handler.obtainMessage(APPLICATION_INFO);
        handler.sendMessage(infoMessage);
    }

有不足请见谅,

问题:ScrollView 中嵌套listView 滑动的时候会出现冲突  大家有没有很好的解决办法....

© 著作权归作者所有

MiloMei
粉丝 6
博文 17
码字总数 6119
作品 0
浦东
程序员
私信 提问
加载中

评论(12)

MiloMei
MiloMei 博主

引用来自“FireMark”的评论

LZ,请教一下,这个问题你有解决么?我现在也遇到同样的问题,求指教,而且我用了setListViewHeightBasedOnChildren这个方法,还是只显示一行..
这个问题最后是换成在listview加了一个header 和 footer ,因为scrollView嵌套listView 对性能有影响。你可以试试
FireMark
FireMark
LZ,请教一下,这个问题你有解决么?我现在也遇到同样的问题,求指教,而且我用了setListViewHeightBasedOnChildren这个方法,还是只显示一行..
meyhuan
meyhuan
MiloMei
MiloMei 博主

引用来自“don_hi”的评论

学习了
互相学习
MiloMei
MiloMei 博主

引用来自“WFChYu”的评论

引用来自“imeibi”的评论

引用来自“张涛OSC”的评论

更好的方法是使用headview、footview替代
恩恩 回头我试试。谢谢哈

我记得有一个方法,据说是继承listView,然后重写onMesure方法。
不是很清楚 有什么demo么
don_hi
don_hi
学习了
WFChYu
WFChYu

引用来自“imeibi”的评论

引用来自“张涛OSC”的评论

更好的方法是使用headview、footview替代
恩恩 回头我试试。谢谢哈

我记得有一个方法,据说是继承listView,然后重写onMesure方法。
kymjs张涛
kymjs张涛

引用来自“imeibi”的评论

引用来自“张涛OSC”的评论

更好的方法是使用headview、footview替代
恩恩 回头我试试。谢谢哈

嗯,加油,文章写的很好。
MiloMei
MiloMei 博主

引用来自“张涛OSC”的评论

更好的方法是使用headview、footview替代
恩恩 回头我试试。谢谢哈
MiloMei
MiloMei 博主

引用来自“张涛OSC”的评论

scrollview中放listview会有性能问题的
是啊 我也发现了 而且滑动的时候还会出现冲突。
GitHub 上受欢迎的 Android UI Library 整理一

抽屉菜单 https://github.com/mikepenz/MaterialDrawer ★7337 - 安卓抽屉效果实现方案 https://github.com/Yalantis/Side-Menu.Android ★3865 - 创意边侧菜单 https://github.com/mxn21/F......

MobService
06/04
38
0
Android之基于XMPP协议即时通讯软件(一)

文章开头,先打一下广告咯,今年误打误撞,侥幸进入2013CSDN博客之星候选,目前排名已经有点不堪入目,所以,谨希望广大基友们动动手指,轻轻的点击两下,给我投出宝贵的一票,求宣传,求扩散...

程序袁_绪龙
2014/12/01
1K
0
OSChina 技术周刊第十九期 —— 开源看板管理系统 LibreBoard

每周技术抢先看,总有你想要的! 移动开发 【软件】移动后端服务平台 Uncode 【博客】Android四大组件之一:BroadcastReceiver 【博客】仿QQ列表滑动弹出按钮、长按提示、刷新列表 服务端开发...

OSC编辑部
2015/01/25
5.7K
6
Android UI 特效大全

Android UI特效大全 总体传送门:http://git.oschina.net/bob4j/Android-UI 基本上项目中都有效果图可自行查看 , 并且有些项目中都有README.md 文件,使用前请先阅读以下。 1.弧形(圆形)菜单...

不正经啊不正经
2015/07/31
1K
0
2017 我用 5 个月分享了 98 篇优秀博文

对上半年所分享的文章进行一个整理,很多读者当时忘记了收藏,以致于查找一篇历史文章很费劲,因此在这里顺便做下记录。目前就分下下面几个大类,没有更多细分,已基本可以查找了。 如果觉得...

code小生
2018/10/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

只需一步,在Spring Boot中统一Restful API返回值格式与统一处理异常

统一返回值 在前后端分离大行其道的今天,有一个统一的返回值格式不仅能使我们的接口看起来更漂亮,而且还可以使前端可以统一处理很多东西,避免很多问题的产生。 比较通用的返回值格式如下:...

晓月寒丶
昨天
59
0
区块链应用到供应链上的好处和实际案例

区块链可以解决供应链中的很多问题,例如记录以及追踪产品。那么使用区块链应用到各产品供应链上到底有什么好处?猎头悬赏平台解优人才网小编给大家做个简单的分享: 使用区块链的最突出的优...

猎头悬赏平台
昨天
28
0
全世界到底有多少软件开发人员?

埃文斯数据公司(Evans Data Corporation) 2019 最新的统计数据(原文)显示,2018 年全球共有 2300 万软件开发人员,预计到 2019 年底这个数字将达到 2640万,到 2023 年达到 2770万。 而来自...

红薯
昨天
65
0
Go 语言基础—— 通道(channel)

通过通信来共享内存(Java是通过共享内存来通信的) 定义 func service() string {time.Sleep(time.Millisecond * 50)return "Done"}func AsyncService() chan string {retCh := mak......

刘一草
昨天
58
0
Apache Flink 零基础入门(一):基础概念解析

Apache Flink 的定义、架构及原理 Apache Flink 是一个分布式大数据处理引擎,可对有限数据流和无限数据流进行有状态或无状态的计算,能够部署在各种集群环境,对各种规模大小的数据进行快速...

Vincent-Duan
昨天
60
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部