Android代码 listview选中,Android ListView 默认选中某一项实现代码

这里是使用 TOC 生成的目录:

•Layout文件定义

◦ListView定义

◦item 模板定义

•代码

◦初始化列表

◦用户点击处理

•效果

--------------------------------------------------------------------------------

要使用 ListView 实现一个充值方式选择,默认想选中第二项,搞了一下午,终于搞定了。原本就没怎么用 Java 写过 Android 应用,又隔了好久没写,一切都生疏了,半吊子变成大呆瓜了……

Layout文件定义

分两部分,一部分是 ListView 的定义,一部分 item 模板,即 row 的定义。

ListView定义

说起来也很简单,下面是 Layout 文件中的 ListView 定义:

android:id="@+id/recharge_method_list"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_marginTop="6dp"

android:dividerHeight="2dp"

android:divider="@color/ssq_bkgnd"

android:background="@android:color/white"

android:choiceMode="singleChoice"

android:listSelector="@null"

>

嘿,别说,CSDN的Markdown编辑器比原来的默认编辑器好用多了,插入代码更简单了。这是第一次使用CSDN的Markdown,赞一个。

item 模板定义

item模板如下定义:

android:orientation="horizontal"

android:layout_width="match_parent"

android:layout_height="60dp"

android:gravity="center_vertical"

android:background="@drawable/option_selector"

>

android:id="@+id/recharge_method_icon"

android:layout_width="40dp"

android:layout_height="40dp"

android:layout_marginLeft="20dp"

android:layout_marginRight="4dp"

/>

android:layout_width="0dp"

android:layout_height="wrap_content"

android:layout_weight="1"

android:orientation="vertical"

>

android:id="@+id/recharge_method_name"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textSize="15sp"

/>

android:id="@+id/recharge_method_clue"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textSize="12sp"

/>

android:id="@+id/recharge_method_checked"

android:layout_width="34dp"

android:layout_height="28dp"

android:layout_marginRight="16dp"

android:src="@drawable/option_checked"

android:visibility="invisible"

/>

我为了给一个 ListView 的 item 显示一个选择图标,在定义 item 模板文件时直接加了一个 ImageView ,通过控制它的显示和隐藏来达到看起来选中的效果。偷了个懒,这是比较简单的实现,在 ListView 中 item 数量不多时对内存、性能等影响不大。

代码

代码比较简单,分两部分来看吧,一部分是初始化列表,一部分是用户点击列表中的某项后切换选中标记。

初始化列表

initRechargeList()方法用来初始化充值方式列表,代码如下:

private void initRechargeList(){

actionTexts = new String[]{

getString(R.string.recharge_unionpay), getString(R.string.recharge_alipay), getString(R.string.recharge_bestpay)

};

actionClue = new String[]{

getString(R.string.recharge_unionpay_clue), getString(R.string.recharge_alipay_clue), getString(R.string.recharge_bestpay_clue)

};

actionImages = new int[]{

R.drawable.unionpay,

R.drawable.recharge_icon_alipay,

R.drawable.recharge_icon_bestpay

};

actionList = (ListView)findViewById(R.id.recharge_method_list);

actionItems = new ArrayList>();

actionAdapter = new SimpleAdapter(this, actionItems, R.layout.recharge_method_list_item,

new String[]{"action_icon", "action_name", "action_clue"},

new int[]{R.id.recharge_method_icon, R.id.recharge_method_name, R.id.recharge_method_clue});

for(int i = 0; i < actionImages.length; ++i) {

HashMap item = new HashMap();

item.put("action_icon", actionImages[i]);

item.put("action_name", actionTexts[i]);

item.put("action_clue", actionClue[i]);

actionItems.add(item);

}

actionList.setAdapter(actionAdapter);

actionList.setOnItemClickListener(itemListener);

actionList.post(new Runnable() {

@Override

public void run() {

lastCheckedOption = actionList.getChildAt(1).findViewById(R.id.recharge_method_checked);

lastCheckedOption.setVisibility(View.VISIBLE);

actionList.setItemChecked(1, true);

}

});

}

上面的代码是初始化充值方式列表。 ListView 的用法也比较简单,View–Row Template–Data–Adapter,四个要素。

我遇到的问题是:如何默认选中某一项。

实际上我的列表中只有三项,不用考虑哪一项会不可见,应该在安卓手机上都是可见的。

一开始我在调用了 ListView 的 setAdapter 方法后,直接使用 getChildAt(1) 来获取第二项对应的 View ,你猜到了,没错,崩溃了: NullPointerException 。空指针啊,用 C++ 时的老情人,改用 Java 写 Android 了,她又跑来和我约会了。

搞了半天,我才弄明白: setAdapter() 其实是异步的 ,调用了这个方法, ListView 的 item 并没有立马创建,而是在下一轮消息处理时才创建。弄明白了这个,就有了前面代码中的解决办法:使用 post() 提交一个 Runnable() 对象,在 Runnable() 内部来做默认选中这种初始化动作。

如你所见,我 new 了一个 Runnable 给 post() 方法,在 run() 内找到了第 2 项,显示了选中图标;并且我把第 2 项对应的 View 保存到 lastCheckedOption 成员变量中。后面我们会通过 lastCheckedOption 这个变量,结合 OnItemClickListener 来实现 ListView 中三个 item 的互斥选择效果。

Markdown怎么给每个段落前加缩进呢……迷惑中……四个空格就给本段落打上背景色了,挺好……

用户点击处理

点击处理是通过 AdapterView.OnItemClickedListener 接口完成的。代码如下:

private AdapterView.OnItemClickListener itemListener = new AdapterView.OnItemClickListener() {

@Override

public void onItemClick(AdapterView> parent, View view, int position, long id) {

if(lastCheckedOption != null){

lastCheckedOption.setVisibility(View.INVISIBLE);

}

lastCheckedOption = view.findViewById(R.id.recharge_method_checked);

lastCheckedOption.setVisibility(View.VISIBLE);

}

};

如你所见,我通过 lastCheckedOption 变量保存了上次选中的 item 中的表示选中效果的图标,用户点击某一个时,先隐藏上一个 item 的选中图标,再显示当前的,就有了貌似互斥的效果了。

一切就这么简单,搞定了。

效果

最终的效果是酱紫的:

5c90dde27208d66f149d1ea968fc3fcb.png

嗳,插入图片比原来的非 Markdown 编辑器好用多了。

--------------------------------------------------------------------------------

好啦,想不到我又来写 Android 应用了,感觉很 High 啊。

--------------------------------------------------------------------------------

还不知道 Markdown 版本的编辑器写出来的博客,发表出来肿么样呢,生成了个目录,直接 TOC 就 OK 了,还是很方便的。写完了,还是没搞明白段落的行首缩进如何搞呢。

据说还支持离线编辑,赞。

还有一点:左右分栏,可以看到效果,比 github 的 wiki 页面编辑要强一点。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值