文档章节

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

MiloMei
 MiloMei
发布于 2015/01/23 11:35
字数 556
阅读 4749
收藏 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
43
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

没有更多内容

加载失败,请刷新页面

加载更多

SpringBoot设置项目访问路径

今天配置Springboot项目访问路径遇到一个小坑,这里做一个记录。针对Springboot2.0以下版本和以上版本的配置方式是不同的。这里针对yml配置文件做记录,properties文件配置方式相同。 Spring...

王子城
30分钟前
5
0
Redis 序列化方式StringRedisSerializer、FastJsonRedisSerializer和KryoRedisSerializer

当我们的数据存储到Redis的时候,我们的键(key)和值(value)都是通过Spring提供的Serializer序列化到数据库的。RedisTemplate默认使用的是JdkSerializationRedisSerializer,StringRedis...

xiaolyuh
41分钟前
5
0
jquery通过css的color属性实现选取特殊颜色的内容

今天一个朋友问到怎么使用jQuery选取特定颜色的内容,以前没有遇到过这样的需求。首先,很多人可能想到使用jQuery属性选择器来实现,这是不可以的,因为 color 是 css 的属性,而不是 html 的...

前端老手
52分钟前
2
0
python3 网络爬虫开发实战 win10环境下 图形验证码识别需要安装的工具及地址

先下载安装tesseract exe文件 tesseract exe文件安装下载地址:https://digi.bib.uni-mannheim.de/tesseract/ win下直接下载双击安装即可,注意路径,下面用于配置环境变量。 参考网址: ht...

S三少S
今天
10
0
PHP学习记录整理

PHP 输出文本的基础指令:echo 和 print。 echo和print的区别 echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用) echo 输出一个或者多个字符串。 print ...

半缘修道半缘君丶
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部