`
star65225692
  • 浏览: 266625 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类

Android的App列表之拖拽ListView(上)

阅读更多

一、准备。

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(这里是字符串),比较好用的一个方法。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics