一、准备。
1.需求问题
? ? ? 初步:实现列表的拖拽效果(可参考Android源码下packages/apps/Music中的播放列表TouchInterceptor.java源码)。
? ? ? ? ? ? ? ?(提前说明一下,本文不是完全按照Music中实现的,代码实现方式做了一些调整,去掉来很多无关的东西,方便大家理解,效果上也修改成了另外一种个人认为是更简单更高效的一套。)
? ? ? 下面以初步实现为例子,逐步展开实现步骤。单纯Hibernate环境的搭建
2.搭建主界面DragListActivity.java和主布局drag_list_activity.xml。
public class DragListActivity extends Activity { //数据列表 private List<String> list = null; //数据适配器 private DragListAdapter adapter = null; //存放分组标签 public static List<String> groupKey= new ArrayList<String>(); //分组一 private List<String> navList = new ArrayList<String>(); //分组二 private List<String> moreList = new ArrayList<String>(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.drag_list_activity); //初始化样本数据 initData(); //后面会介绍DragListView DragListView dragListView = (DragListView)findViewById(R.id.drag_list); adapter = new DragListAdapter(this, list); dragListView.setAdapter(adapter); }}
3.列表项的布局drag_list_item.xml。
<?xml version="1.0" encoding="utf-8"?><!-- 强调一点,使用相对布局 --><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/drag_list_item_text" android:layout_width="wrap_content" android:layout_height="@dimen/drag_item_normal_height" android:paddingLeft="5dip" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:gravity="center_vertical"/> <ImageView android:id="@+id/drag_list_item_image" android:src="@drawable/list_icon" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_width="wrap_content" android:layout_height="@dimen/drag_item_normal_height"/></RelativeLayout>
?4.准备样本数据。
? ? ? 我已经准备好了两组数据,在前面提到的initData()方法中执行初始化。
public void initData(){ //数据结果 list = new ArrayList<String>(); //groupKey存放的是分组标签 groupKey.add("A组"); groupKey.add("B组"); for(int i=0; i<5; i++){ navList.add("A选项"+i); } list.add("A组"); list.addAll(navList); for(int i=0; i<8; i++){ moreList.add("B选项"+i); } list.add("B组"); list.addAll(moreList);}
?? ? ? 这里定义了分组标签集合groupKey后面分组的时候会用到。
5.自定义适配器类DragListAdapter。
? ? ? 接着我们搭建数据适配器,负责把list的数据填充到ListView中。TP-LINK路由TL-402系列VB重启路由代码
public static class DragListAdapter extends ArrayAdapter<String>{ public DragListAdapter(Context context, List<String> objects) { super(context, 0, objects); } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = convertView; if(view==null){ //加载列表项模板 view = LayoutInflater.from(getContext()).inflate(R.layout.drag_list_item, null); } TextView textView = (TextView)view.findViewById(R.id.drag_list_item_text); textView.setText(getItem(position)); return view; }}
? 注意getItem(position)会取得数组适配器中position位置的T(这里是字符串),比较好用的一个方法。