ListFragment的使用

来源:互联网 发布:sai软件如何使用 编辑:程序博客网 时间:2024/06/06 00:03

ListFragment的使用

  • 扩展 ListFragmen t类
  • 写一个扩展自ArrayAdapter<>的内部类(也可以扩展自 BaseAdapter,灵活性更大)
  • 覆盖View getView() 方法:
    if(convertView == null) View v = getLayoutInflater().inflate(R.layout.itemlayout,null)
    设置各 view 后返回 convertview
  • 覆盖 ListFragment 类的 onCreate 方法并 setListAdapter。

给 ListView 设置无 item 时显示不同内容

  • 创建一个layout,其中包含一个容器用作无item时显示的视图,id 为 android:id="@android:id/empty" ,另一个为 ListView,id 为 android:id="@android:id/list"
  • 覆盖Fragment onCreateView 方法,inflate此layout即可

创建上下文菜单

  • 覆盖 onCreateContextMenu,getMenuInflater().inflate 一个菜单资源
  • 在 onCreateView 中 registerForContextView(listview)
  • 覆盖 onContextItemSelected,根据选择的菜单项 item.getItemId() 操作对应的列表 Item getListAdapter().getItem(item.getMenuInfo().position)

实现多选操作

  • onCreateView 方法中:
ListView lv = (ListView)v.findViewById(android.R.id.list);lv.setChoiceMode(lv.CHOICE_MODE_MULTIPLE_MODAL);lv.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener(){ });
  • 实现五个抽象方法,在 onCreateActionMode 中 mode.getMenuInflater().inflate 设置菜单并返回true
  • 在 onActionItemClicked 中:
switch (item.getItemId()) {    case R.id.menu_item_delete:    TaskAdapter ta = (TaskAdapter)getListAdapter();    for(int i = ta.getCount() -1;i>=0;i--)    {        if(getListView().isItemChecked(i))            mTasks.remove(ta.getItem(i));    }    mode.finish();    ta.notifyDataSetChanged();    return true;}return false;

激活状态时使用不同背景

  • 在 drawable 中新建一个xml,root 为 selector,含一个item
  • 设置 android:state_activated="true" android:drawable="@android:color/dark_gray"
  • 在 item 视图 xml 文件中引用此 xml 作为 background 即可
  • 另外还有 android:state_pressed 属性等

项目之间添加间隔

给 fragment_list.xml 布局中的 ListView 设置 divider@android:color/transparent,设置dividerHeight20dp

其它

ListView 由 ArrayAdapter 的 notifyDataSetChanged 刷新。

1 0
原创粉丝点击