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

更新时间:2023-05-15 10:09:43 阅读: 评论:0

Android代码listview选中,AndroidListView默认选中某⼀项实现
代码
over flow这⾥是使⽤ TOC ⽣成的⽬录:
·Layout⽂件定义
◦ListView定义
cable什么意思◦item 模板定义
·代码
◦初始化列表
◦⽤户点击处理
·效果
--------------------------------------------------------------------------------
要使⽤ ListView 实现⼀个充值⽅式选择,默认想选中第⼆项,搞了⼀下午,终于搞定了。原本就没怎么⽤ Java 写过 Android 应⽤,⼜隔了好久没写,⼀切都⽣疏了,半吊⼦变成⼤呆⽠了……
Layout⽂件定义
分两部分,⼀部分是 ListView 的定义,⼀部分 item 模板,即 row 的定义。
ListView定义
你是sb说起来也很简单,下⾯是 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 模板定义
redbone
item模板如下定义:
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="60dp"
android:gravity="center_vertical"
android:background="@drawable/option_lector"
>
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(harge_unionpay), getString(harge_alipay), getString(harge_bestpay) };lavinia
actionClue = new String[]{
getString(harge_unionpay_clue), getString(harge_alipay_clue),
getString(harge_bestpay_clue)
};
actionImages = new int[]{
R.drawable.unionpay,
harge_icon_alipay,
harge_icon_bestpay
};
actionList = (ListView)findViewById(harge_method_list);
actionItems = new ArrayList>();
actionAdapter = new SimpleAdapter(this, actionItems, harge_method_list_item,
new String[]{"action_icon", "action_name", "action_clue"},
new int[]{harge_method_icon, harge_method_name, harge_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.tAdapter(actionAdapter);
actionList.tOnItemClickListener(itemListener);
actionList.post(new Runnable() {
@Override
public void run() {
lastCheckedOption = ChildAt(1).findViewById(harge_method_checked); lastCheckedOption.tVisibility(View.VISIBLE);
actionList.tItemChecked(1, true);
}
});
}
上⾯的代码是初始化充值⽅式列表。 ListView 的⽤法也⽐较简单,View–Row Template–Data–Adapter,四个要素。
我遇到的问题是:如何默认选中某⼀项。
实际上我的列表中只有三项,不⽤考虑哪⼀项会不可见,应该在安卓⼿机上都是可见的。
⼀开始我在调⽤了 ListView 的 tAdapter ⽅法后,直接使⽤ getChildAt(1) 来获取第⼆项对应的 View ,你猜到了,没错,崩溃了:NullPointerException 。空指针啊,⽤ C++ 时的⽼情⼈,改⽤ Java 写 Android 了,她⼜跑来和我约会了。
人教版高一英语课件搞了半天,我才弄明⽩: tAdapter() 其实是异步的 ,调⽤了这个⽅法, 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.tVisibility(View.INVISIBLE);
}
lastCheckedOption = view.findViewById(harge_method_checked);
lastCheckedOption.tVisibility(View.VISIBLE);
}t top box
got it};
如你所见,我通过 lastCheckedOption 变量保存了上次选中的 item 中的表⽰选中效果的图标,⽤户点击某⼀个时,先隐藏上⼀个 item 的选中图标,再显⽰当前的,就有了貌似互斥的效果了。
⼀切就这么简单,搞定了。
效果
最终的效果是酱紫的:
嗳,插⼊图⽚⽐原来的⾮ Markdown 编辑器好⽤多了。
--------------------------------------------------------------------------------
好啦,想不到我⼜来写 Android 应⽤了,感觉很 High 啊。
--------------------------------------------------------------------------------
还不知道 Markdown 版本的编辑器写出来的博客,发表出来肿么样呢,⽣成了个⽬录,直接 TOC 就 OK 了,还是很⽅便的。写完了,还是没搞明⽩段落的⾏⾸缩进如何搞呢。
据说还⽀持离线编辑,赞。
还有⼀点:左右分栏,可以看到效果,⽐ github 的 wiki 页⾯编辑要强⼀点。
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持脚本之家。

本文发布于:2023-05-15 10:09:43,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/109230.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:upside down
标签:选中   效果   默认   段落   缩进
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图