随笔5

  • ListView 列表视图

      主表布局和列表项布局分离, 他们通过一个适配器类实现数据的加载. 这种方式我很喜欢.

 

      刚刚做了一个 ListActivity 的例子, 好失败, ArrayAdapter 的构造函数改变了吗? 现在要指定一个 textViewResourceId 才行.

      现在的

        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,
                R.layout.list_row, R.id.item ,  data);

      以前的人写的例子

        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,
                R.layout.list_row, data);

 

       如果整个页面主要就是一个列表, 那你就可以继承 ListActivity 如果不想继承 ListActivity, 那就建立一个 ListView 变量, 多个列表就建多个 ListView 变量对应.

 

       如果是继承自 ListActivity 类的子类,  调用 setContentView() 加载的布局文件里面必须有 android:id="@android:id/list" 的<ListView>, 因为一个布局文件中, 你可以有 0 到多个<ListView>, 如果你不给它一个默认加载数据的ListView, 它就只能像无头苍蝇一样乱飞乱找了,  就算找到了加载容器, 但是花多了很多功夫.

      你甚至可以把 setContentView() 注释掉, 啥都没有的时候, 它内部会建立一个 ListView.

      <TextView android:id="@android:id/empty" /> 如果列表无数据, 那就显示TextView 的文本.

 

        这样还有一点要说的, "@android:id/list" 可以用 "@id/android:list" 替换, 当然 "@android:id/empty" 也可以用 "@id/android:empty" 替换, 效果是一样的.

 

        在ListActivity 的文档和例子中, 这两种写法都有用到.

        在LayoutEditor 中, 我们 CTRL + 选中"@android:id/empty", 是可以打开也 ids.xml 文件的. ids.xml 文件里面配置了一些静态的 ID.如果是用 "@id/android:list" 是没有这个效果的.

 

        我们自定义的资源, 一般会 android:id="@+id/item_layout" 这样设置id. 如果是用 "@id/***" 那么, 被引用的不仅仅是静态ID, 还可能我们自定义的ID, 而"@android:id/**", android:id 很明确了, 就是要 android 本身具有的静态 ID.

 

        这个让我想起了 C++ 的include的 "" 和 <>, 内部库和外部库的查询顺序的不同而已, 结果是相同的.

 

        本人是比较赞成用 "@android:id/list" 的.

 

 

 


 

        去除ListView 行的分界线

        mListView.setDivider(null);
        mListView.setDividerHeight(0);

 

        如果是继承 ListActivity 的类, 就用下面的

        getListView().setDivider(null);

        getListView().setDividerHeight(0);


  • ListView 变量行的单击监听和长按监听

  • 如果是继承 ListActivity 的类,

  • 还需要加上这句, 才能让长按监听的上下文菜单显示

 


  • 有些ListView的 Listener, 如 onItemSelectedListener 在ListActivity 类没有对应的方法, 怎么办呢?

      这个是完全没问题的, 在ListActivity 子类中调用方法 getListView() , 我们就可以获得其ListView 对象, 你想对这个ListView 对象做一个selectedListener 还不简单!

     getListView().setOnItemSelectedListener(new OnItemSelectedListener(){.....});

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值