这里是使用 TOC 生成的目录:
•Layout文件定义
◦ListView定义
◦item 模板定义
•代码
◦初始化列表
◦用户点击处理
•效果
--------------------------------------------------------------------------------
要使用 ListView 实现一个充值方式选择,默认想选中第二项,搞了一下午,终于搞定了。原本就没怎么用 Java 写过 Android 应用,又隔了好久没写,一切都生疏了,半吊子变成大呆瓜了……
Layout文件定义
分两部分,一部分是 ListView 的定义,一部分 item 模板,即 row 的定义。
ListView定义
说起来也很简单,下面是 Layout 文件中的 ListView 定义:
<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" > </ListView>
嘿,别说,CSDN的Markdown编辑器比原来的默认编辑器好用多了,插入代码更简单了。这是第一次使用CSDN的Markdown,赞一个。
item 模板定义
item模板如下定义:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="60dp" android:gravity="center_vertical" android:background="@drawable/option_selector" > <ImageView android:id="@+id/recharge_method_icon" android:layout_width="40dp" android:layout_height="40dp" android:layout_marginLeft="20dp" android:layout_marginRight="4dp" /> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="vertical" > <TextView android:id="@+id/recharge_method_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="15sp" /> <TextView android:id="@+id/recharge_method_clue" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="12sp" /> </LinearLayout> <ImageView 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" /> </LinearLayout>
我为了给一个 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<HashMap<String, Object>>(); 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<String, Object> item = new HashMap<String, Object>(); 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 的选中图标,再显示当前的,就有了貌似互斥的效果了。
一切就这么简单,搞定了。
效果
最终的效果是酱紫的:
嗳,插入图片比原来的非 Markdown 编辑器好用多了。
--------------------------------------------------------------------------------
好啦,想不到我又来写 Android 应用了,感觉很 High 啊。
--------------------------------------------------------------------------------
还不知道 Markdown 版本的编辑器写出来的博客,发表出来肿么样呢,生成了个目录,直接 TOC 就 OK 了,还是很方便的。写完了,还是没搞明白段落的行首缩进如何搞呢。
据说还支持离线编辑,赞。
还有一点:左右分栏,可以看到效果,比 github 的 wiki 页面编辑要强一点。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
问题内容: 我正在研究适用于Python的matplotlib库。我开始理解它的一些基本复杂性,因为pylab和pyplot之间的区别,并且我正在尝试复制和修改图库中的一些示例。 我仍然不清楚的一件事是配置文件matplotlibrc的实际作用。 目前,我使用Windows 7下的WinPython 3.3.5.0 64位分发版。.matplotlibrc文件位于WinPython-64bit-3
问题内容: 我有一个具有日期时间字段的模型: 当我在内置的django admin中检查该应用程序时,还会附加时间,因此,如果你尝试保存它,则会返回错误。如何设置默认的日期呢?(也不起作用) 问题答案: 这就是为什么你应该始终导入基本模块:而不是该模块中的类的原因f。 你犯的另一个错误是使用实际调用默认的函数。这意味着所有模型都将在首次定义类时获得日期-因此,如果你的服务器在不重新启动Apache
本文向大家介绍改变checkbox默认选中状态及取值的实现代码,包括了改变checkbox默认选中状态及取值的实现代码的使用技巧和注意事项,需要的朋友参考一下 1)设置1级和3级选中 2)获取选中的值,以‘,'分隔显示 更改默认状态: 遍历取值: 以上这篇改变checkbox默认选中状态及取值的实现代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。
问题内容: 我有一个很奇怪的要求,其中要求我默认在HTML的下拉菜单中没有选择任何选项。然而, 我不能用这个 因为,为此,我将必须进行验证以处理第一个选项。有人可以在没有将第一个选项作为select标签的一部分的情况下帮助我实现此目标吗? 问题答案: 也许这会有所帮助 将默认显示。但是,如果您选择一个选项,则将无法再次选择它。 您也可以通过添加一个空白来隐藏它 因此它将不再显示在列表中。 选项2
本文向大家介绍CheckBox控件默认选中,提交时永远获得选中状态的实现代码,包括了CheckBox控件默认选中,提交时永远获得选中状态的实现代码的使用技巧和注意事项,需要的朋友参考一下 写个项目,从数据库中获得的数据绑定值Checkbox,绑定方法如下 然后在protected void Page_Load(object sender, EventArgs e)方法中加入CheckBoxBind
本文向大家介绍SpringBoot中默认缓存实现方案的示例代码,包括了SpringBoot中默认缓存实现方案的示例代码的使用技巧和注意事项,需要的朋友参考一下 在上一节中,我带大家学习了详解SpringBoot集成Redis来实现缓存技术方案,尤其是结合Spring Cache的注解的实现方案,接下来在本章节中,我带大家通过代码来实现。 一. Spring Boot实现默认缓存 1. 创建web项