写博客的目的在于分享,更是为了积累项目经验.博客亦是一本武功秘籍,回头哪个招式忘了怎么耍,也好对照参考.这篇文章是对ListView,SimpleAdapter以及ListView监听事件的使用详解,附上项目效果图:

去除Activity头部可参考我的这篇文章” Android Studio Activity去除头部标题栏

Android Studio Activity去除头部标题栏

第一步:
在activity_main.xml中拖一个ListView控件,然后把ListView父容器的内边距去掉即可,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"android:layout_width="match_parent" android:layout_height="match_parent"tools:context="myself.myapplication.MainActivity"><ListView
        android:id="@+id/listView"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_alignParentBottom="true"android:layout_alignParentRight="true"android:layout_alignParentEnd="true"android:layout_marginRight="11dp"android:layout_marginEnd="11dp"android:layout_marginBottom="19dp" />
</RelativeLayout>

第二步:
自定义布局文件,取名为layout.xml用于ListView每一个Item的样式
layout.xml布局截图如下:

layout.xml布局文件参考代码如下:

<?xml version="1.0" encoding="utf-8"?><!--谷歌官方推荐使用 RelativeLayout 布局,android:layout_marginTop="" 和android:layout_centerVertical="true"虽然都能达到垂直居中的效果,但是layout_marginTop不是原则意义上的居中,只是简单的把控件移了一定单位的像素个人觉得使用android:layout_centerVertical="true"比较好.使用的前提是:父类容器的高度必须为match_parent或者某一具体的值否则设置无效,android:layout_centerHorizontal="true"同理亦然-->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="80dp"android:paddingRight="10dp"><ImageView
        android:id="@+id/img1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@mipmap/img6" /><LinearLayout
        android:id="@+id/line1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerVertical="true"android:layout_marginLeft="20dp"android:layout_toRightOf="@+id/img1"android:orientation="vertical"><TextView
            android:id="@+id/t1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textColor="#fff"android:textSize="18sp"android:text="@string/kg" /><TextView
            android:id="@+id/t2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="5dp"android:text="@string/beyond" /></LinearLayout><ImageView
        android:id="@+id/img2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_centerVertical="true"android:src="@mipmap/log" />
</RelativeLayout>

第三步:
编写MainActivity.java 参考代码如下:

package myself.myapplication;import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class MainActivity extends AppCompatActivityimplements AdapterView.OnItemClickListener , AbsListView.OnScrollListener{//声明ListView控件private ListView listView;//创建简单适配器(并不简单,功能很强大)private SimpleAdapter simpleAdapter;//定义List泛型集合,里面存放的是Map键值对, listDate作为ListView的数据源private List<Map<String, Object>> listDate;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);/** requestWindowFeature(Window.FEATURE_NO_TITLE);* 这段代码的目的是为了去除Activity的头部,在myEclipse里面设置有效,* 但在Android Studio无效** 而且在AndroidManifest.xml 修改这段代码程序会崩溃,可见Android Studio也有* 美中不足的地方,相信会有其他的解决办法,此时此处暂且搁置* android:theme="@android:style/Theme.NoTitleBar"* Android:theme="@android:style/Theme.NoTitleBar.Fullscreen"*/requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_main);//得到ListView控件listView = (ListView) findViewById(R.id.listView);/** 把ListView要显示的图片和文字声明出来,暂时存放在数组中,为插入到listDate做准备* 三个数组对应三个不同的显示信息,ListView每一个Item会根据你自定义的* 布局样式依次显示img[1],text1[1],text2[1]的内容* 其实我们还差一个,就是最右边的播放图标,由于每一个item的图标都是相同的,* 我们直接添加到集合中即可*/int[] img = new int[]{R.mipmap.img1, R.mipmap.img2, R.mipmap.img3, R.mipmap.img4, R.mipmap.img5, R.mipmap.img6, R.mipmap.img7};//图片右边的第一排文字String[] text1 = new String[]{"酷狗热歌", "DJ热碟", "网络红歌", "咖啡厅", "新歌", "经典", "抒情"};//图片右边的第二排文字String[] text2 = new String[]{"Beyond-光辉岁月", "许嵩-山水之间", "周杰伦-晴天", "许嵩-雅俗共赏", "周杰伦-龙卷风", "许嵩-千百度", "汪晨蕊-友情岁月"};/** 实例化泛型集合listDate* 使用MyEclipse开发的朋友,你的实例化代码应该是这样的* listDate = new ArrayList<Map<String,Object>>();** 但请注意:对于Android Studio来说这样写,你的代码底下会有烦人的波浪线,* 为什么会这样,有一种说法是:* 因为Android Studio需要的JDK版本是7.0及以上,这种JDK版本不支持此种写法*/listDate = new ArrayList<>();/*** 利用for循环,把数据源添加到集合中(i不管小于哪个数组的长度都是可以的,* 三个数组的长度是相等的)* 第一层for循环是为了把相同的数据多次添加*/for (int k = 0; k < 3; k++) {for (int i = 0; i < img.length; i++) {Map<String, Object> map = new HashMap<>();map.put("img1", img[i]);map.put("text1", text1[i]);map.put("text2", text2[i]);map.put("img2", R.mipmap.log);listDate.add(map);}}/** 调用SimpleAdapter的构造方法* sim = new SimpleAdapter(context, data, resource, from, to);* context: 上下文* data:    数据源 List<? extends Map<String,?>> data*          一个Map所组成的List集合*          每一个Map(键-值对)中的键都必须包含所有在from中所指定的键* resource:ListView显示将要参照的布局文件ID* from:    Map中的键名* to:      绑定布局文件layout的ID,与from形成对应关系*/simpleAdapter = new SimpleAdapter(MainActivity.this,listDate,R.layout.layout,new String[]{"img1", "text1", "text2", "img2"},new int[]{R.id.img1, R.id.t1, R.id.t2, R.id.img2});listView.setAdapter(simpleAdapter);//启用监听器listView.setOnItemClickListener(this);listView.setOnScrollListener(this);}/** 拓展内容:如何监听ListView的每一项(Item)的事件(如点击播放)*          如何监听ListView的滚动事件(如淘宝的下拉刷新商品)* 监听器是程序和用户(或者系统)交互的桥梁* SimpleAdapter(适配器)是视图界面和数据源交互的桥梁*/@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {/*** 我们要实现的功能是:你点击了ListView的每一项时,会弹出该Item的文本信息*  listView.getItemAtPosition(position)得到的是一个Object对象,须把它转化成String类型*  方法调用后我们还应在onCreate()函数里面启用监听器*/String text = "" + listView.getItemAtPosition(position);Toast.makeText(MainActivity.this, "position: " + position + "歌曲名: " + text, Toast.LENGTH_LONG).show();}@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {switch(scrollState){case SCROLL_STATE_FLING:Log.i("Main", "用户在手指离开屏幕之前,由于用力的划了一下,视图仍依靠惯性继续滑动");//模拟刷新功能Map<String, Object>map = new HashMap<>();map.put("img1", R.mipmap.img1);map.put("text1", "增加项");map.put("text2", "增加歌曲");map.put("img2", R.mipmap.log);listDate.add(map);//通知视图界面更新simpleAdapter.notifyDataSetChanged();break;case SCROLL_STATE_IDLE:Log.i("Main","视图已经停止滑动");break;case SCROLL_STATE_TOUCH_SCROLL:Log.i("Main","手指没有离开屏幕,视图跟随手指滑动");break;}}@Overridepublic void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {}
}

Android Studio ListView+SimpleAdapter使用之仿酷狗界面相关推荐

  1. android仿酷狗界面,Android仿酷狗动感歌词(支持翻译和音译歌词)显示效果

    简介 该开源依赖库是乐乐音乐播放器里的一个歌词模块功能,现在把该功能模块独立出来进行优化,并弄成了一个开源依赖库,其它音乐播放器项目只要引用该库并调用接口,便可轻松实现与乐乐音乐播放器一样的动感歌词显 ...

  2. 基于Qt的仿酷狗音乐播放器设计(二)

    简述 在上一文"基于Qt的仿酷狗音乐播放器设计(一)"中,博主给出了仿酷狗界面的部分内容,在本文中将继续分析酷狗界面,并作出相应的分析. 下面我们来看一下酷狗界面中的左侧滑动页控制 ...

  3. android歌词效果,Android仿酷狗动感歌词(支持翻译和音译歌词)显示效果

    引言 该开源依赖库是乐乐音乐播放器里的一个歌词模块功能,现在把该功能模块独立出来进行优化,并弄成了一个开源依赖库,其它音乐播放器项目只要引用该库并调用接口,便可轻松实现与乐乐音乐播放器一样的动感歌词显 ...

  4. Android仿酷狗动感歌词(支持翻译和音译歌词)显示效果

    引言 该开源依赖库是乐乐音乐播放器里的一个歌词模块功能,现在把该功能模块独立出来进行优化,并弄成了一个开源依赖库,其它音乐播放器项目只要引用该库并调用接口,便可轻松实现与乐乐音乐播放器一样的动感歌词显 ...

  5. Android插件化开发指南——实践之仿酷狗音乐首页

    文章目录 1. 前言 2. 布局分析 3. 底部导航栏的实现 4. 顶部导航栏和ViewPager+Fragment的关联 1. 前言 在Android插件化开发指南--2.15 实现一个音乐播放器A ...

  6. Android耳机线控详解,蓝牙耳机按钮监听(仿酷狗线控效果)

    转载请注明出处:http://blog.csdn.net/fengyuzhengfan/article/details/46461253 当耳机的媒体按键被单击后,Android系统会发出一个广播,该 ...

  7. android高仿酷狗音乐播放器源码下载

    这是一款简单的读取SD卡音乐文件进行播放.暂停.删除.切歌等功能的高仿酷狗音乐播放器. 主要功能: 模块 简要说明 扫描SD卡音乐 扫描SD卡,并显示出本地音乐列表 提供歌词跟随音乐滚动更能   采用 ...

  8. android 酷狗demo_Android仿酷狗皮肤预览界面的实现(利用canvas缩放的原理)

    GitHub_ AnJiaoDe/Scale-Master APKdemo_ AnJiaoDe/Scale-Master/blob/master/app/build/outputs/apk/app-d ...

  9. android 酷狗demo_Android仿酷狗音乐SeekBar——样式篇

    Android仿酷狗音乐SeekBar 需求:仿酷狗音乐SeekBar 直接上图,上代码 1903148-676fcbf2e5048392.png 1903148-d3e5ab81fa2acd42.p ...

最新文章

  1. ACMNO.24 C语言-转置矩阵 写一个函数,使给定的一个二维数组(3×3)转置,即行列互换。 输入 一个3x3的矩阵 输出 转置后的矩阵 样例
  2. 支持Dubbo接口文档生成的工具!
  3. 记录SQL server学习的存储过程的摘录
  4. Lattice Diamond 和 ispLEVER 的不同之处
  5. UE4 集成讯飞听写插件
  6. c# 配置文件App.config操作类库
  7. 视觉SLAM笔记(37) 求解 PnP
  8. 95-235-048-源码-task-数据交换策略
  9. Linux线程同步介绍和示例
  10. SQL Server Reporting Services最佳做法
  11. 最透彻的关于“随机数种子”和“伪随机数”的产生原理
  12. migo通过预留单目的地 可修改_金蝶K/3ERP系统应用教程:生产投料单的维护
  13. React Native 圆形进度条组件
  14. 数据备份与数据容灾全解析
  15. shell中sudo和su命令
  16. 战列舰机械计算机,问个事,二战时期的战列舰可以装备垂直稳定仪么?
  17. css安卓手机位置偏差,完美解决移动端使用rem单位时CSSSprites错位问题_html/css_WEB-ITnose...
  18. java求几何周长面积_java求几何图形面积
  19. win10 ESP盘符问题(隐藏系统分区)
  20. JMeter - REST API测试 - 完整的数据驱动方法(翻译)

热门文章

  1. C++学习--static函数,内联(inline)函数, 友元 (friend) 函数
  2. Colab读取Google drive云端硬盘
  3. 2022茶艺师(中级)考题模拟考试平台操作
  4. QT调用大恒相机的开发教程
  5. Django(文件上传+分页+表单)
  6. day50 django第一天 自定义框架
  7. 双11到了,这家硅谷巨头为何想跟阿里巴巴抢这块地盘?
  8. (转) 杨元:CSS浮动(float,clear)通俗讲解
  9. 数据库考研复试题(华东理工)
  10. C语言调色板颜色渐变,VC++实现的OpenGL线性渐变色绘制操作示例