展会信息港展会大全

Android学习系列(10)--App列表之拖拽ListView(上)
来源:互联网   发布日期:2015-12-04 16:22:03   浏览:1295次  

导读:研究了很久的拖拽ListView的实现,受益良多,特此与尔共飨。 鉴于这部分内容网上的资料少而简陋,而具体的实现过程或许对大家才有帮助,为了详尽而不失真,我们一步一步分析,分成两篇文...

研究了很久的拖拽ListView的实现,受益良多,特此与尔共飨。鉴于这部分内容网上的资料少而简陋,而具体的实现过程或许对大家才有帮助,为了详尽而不失真,我们一步一步分析,分成两篇文章。

一、准备。

1.需求问题初步:实现列表的拖拽效果(可参考Android源码下packages/apps/Music中的播放列表TouchInterceptor.java源码)。(提前说明一下,本文不是完全按照Music中实现的,代码实现方式做了一些调整,去掉来很多无关的东西,方便大家理解,效果上也修改成了另外一种 个人认为是更简单更高效的一套。)拓展:借鉴上一篇文章Android学习系列(9)--App列表之分组ListView,实现分组列表的拖拽效果。下面以初步实现为例子,逐步展开实现步骤。

2.搭建主界面DragListActivity.java和主布局drag_list_activity.xml。

view sourceprint?01 public class DragListActivity extends Activity {

02

03//数据列表

04private List<String> list = null;

05

06//数据适配器

07private DragListAdapter adapter = null;

08

09//存放分组标签

10public static List<String> groupKey= new ArrayList<String>();

11//分组一

12private List<String> navList = new ArrayList<String>();

13//分组二

14private List<String> moreList = new ArrayList<String>();

15

16@Override

17public void onCreate(Bundle savedInstanceState) {

18super.onCreate(savedInstanceState);

19setContentView(R.layout.drag_list_activity);

20

21//初始化样本数据

22initData();

23

24//后面会介绍DragListView

25DragListView dragListView = (DragListView)findViewById(R.id.drag_list);

26adapter = new DragListAdapter(this, list);

27dragListView.setAdapter(adapter);

28}

29 }

3.列表项的布局drag_list_item.xml。

view sourceprint?01 <?xml version="1.0" encoding="utf-8"?>

02 <!-- 强调一点,使用相对布局 -->

03android:layout_width="fill_parent"

04android:layout_height="wrap_content">

05<TextView

06android:id="@+id/drag_list_item_text"

07android:layout_width="wrap_content"

08android:layout_height="@dimen/drag_item_normal_height"

09android:paddingLeft="5dip"

10android:layout_alignParentLeft="true"

11android:layout_centerVertical="true"

12android:gravity="center_vertical"/>

13<ImageView android:id="@+id/drag_list_item_image"

14android:src="@drawable/list_icon"

15android:layout_alignParentRight="true"

16android:layout_centerVertical="true"

17android:layout_width="wrap_content"

18android:layout_height="@dimen/drag_item_normal_height"/>

19 </RelativeLayout>

4.准备样本数据。我已经准备好了两组数据,在前面提到的initData()方法中执行初始化。

view sourceprint?01 public void initData(){

02//数据结果

03list = new ArrayList<String>();

04

05//groupKey存放的是分组标签

06groupKey.add("A组");

07groupKey.add("B组");

08

09for(int i=0; i<5; i++){

10navList.add("A选项"+i);

11}

12list.add("A组");

13list.addAll(navList);

14

15for(int i=0; i<8; i++){

16moreList.add("B选项"+i);

17}

18list.add("B组");

19list.addAll(moreList);

20 }

这里定义了分组标签集合groupKey后面分组的时候会用到。

5.自定义适配器类DragListAdapter。接着我们搭建数据适配器,负责把list的数据填充到ListView中。

view sourceprint?01 public static class DragListAdapter extends ArrayAdapter<String>{

02public DragListAdapter(Context context, List<String> objects) {

03super(context, 0, objects);

04}

05@Override

06public View getView(int position, View convertView, ViewGroup parent) {

07View view = convertView;

08if(view==null){

09//加载列表项模板

10view = LayoutInflater.from(getContext()).inflate(R.layout.drag_list_item, null);

11}

12TextView textView = (TextView)view.findViewById(R.id.drag_list_item_text);

13textView.setText(getItem(position));

14return view;

15}

16 }

注意getItem(position)会取得数组适配器中position位置的T(这里是字符串),比较好用的一个方法。

&nbsp

赞助本站

人工智能实验室

相关热词: android开发 教程

AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港