大家都知道在listView中使用editText,在输入过程中是有冲突的。今天稍微研究了一下这个问题,有一点点小小的心得和大家一起分享下。
首先建立一个最简单的demo,主界面就是一个ListView,其中list_item的布局代码如下:
01 |
<?xml version="1.0" encoding="utf-8"?> |
02 |
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" |
03 |
android:orientation="vertical" android:layout_width="match_parent" |
04 |
android:layout_height="match_parent"> |
05 |
<TextView android:layout_width="wrap_content" |
06 |
android:layout_height="wrap_content" android:text="TextView" |
07 |
android:id="@+id/textView1" android:textSize="20sp"></TextView> |
08 |
<EditText android:layout_width="match_parent" |
09 |
android:layout_height="wrap_content" android:id="@+id/editText1"> |
很简单list_item包含一个TextView,还有一个就是EditText。
运行后在某一项EditText进行输入,点击返回键隐藏输入法键盘时会遇到一个问题即所有项的EditText内容都被清空了。
解决办法:在Manifest中Activity标签下加入android:windowSoftInputMode="adjustPan"。
这个问题是解决了,但是还有其他的问题。
当你点击最后一项时,没有问题,此时最后一项的EditText拥有焦点。然后,点击系统返回键,再点击最后一项,此时你会发现输入法将最后一项完全挡住了(这样很影响用户体验)。
解决方法:当点击系统返回键时,让其释放焦点。
有人肯定会先这样处理:
2 |
public boolean onKeyDown(int keyCode, KeyEvent event) { |
3 |
// TODO Auto-generated method stub |
4 |
if (keyCode == KeyEvent.KEYCODE_BACK) { |
7 |
return super.onKeyDown(keyCode, event); |
但是很遗憾,当输入法键盘显示的时候,你点击系统的返回键事件被捕获了,而不会在onKeyDown里执行。
02 |
public boolean dispatchKeyEventPreIme(KeyEvent event) { |
03 |
if (context != null) { |
04 |
InputMethodManager imm = (InputMethodManager) context |
05 |
.getSystemService(Context.INPUT_METHOD_SERVICE); |
06 |
if (imm.isActive() && event.getKeyCode() == KeyEvent.KEYCODE_BACK) { |
08 |
for (int i = 0; i < getChildCount(); i++) { |
09 |
View view = getChildAt(i); |
10 |
EditText editText1 = (EditText) view |
11 |
.findViewById(R.id.editText1); |
12 |
editText1.clearFocus(); |
16 |
return super.dispatchKeyEventPreIme(event); |
自定义控件重写dispatchKeyEventPreIme方法判断软键处于活动状态,并且用户按下了返回键盘。
说到这里提一下,自定义adapter的getView方法中view不要复用
2 |
public View getView(int position, View convertView, ViewGroup parent) { |
3 |
convertView = mLayoutInflater.inflate(R.layout.list_item, null); |
写到这里觉得这种实现方式和ScrollView+LinearLayout本质差不多
顺便提一下怎么保存数据:
01 |
editText1.addTextChangedListener(new TextWatcher() { |
04 |
public void onTextChanged(CharSequence s, int start, int before, |
09 |
public void beforeTextChanged(CharSequence s, int start, int count, |
14 |
public void afterTextChanged(Editable s) { |
最后,附demo下载 http://www.oschina.net/code/snippet_132911_14137
- ListView 中含有 EditText 导致焦点丢失的问题
ListView 中的 item 中有 EditText 时. 如果activity的输入法选项设置为 android:windowSoftInputMode="adjustResize&q ...
- 关于ListView中包含EditText数据复用引起异常的解决方案
概述 前几天测试提了一个bug,在ListView中添加留言信息,导致错乱的问题.实际上就是ListView需要添加一个EditText,复用导致错乱的问题,这个问题以前也遇到过.诸如,ListVie ...
- ListView中含有EditText时候--要命的焦点问题迎刃而解
最近做项目的时候遇到了一个问题,就是在ListView的item上面含有一个EditText,要求是这样: 1当点击item的时候,item可以点击; 2当点击EditText的时候EditText也 ...
- Android开发 解决AlertDialog中的EditText无法调出输入法的问题
在AlertDialog中使用自定义的View,如果View中有EditText,在上面点击,默认是跳不出软键盘的,不是焦点的问题.解决方法,有两种,一是把AlertDialog换成Dialog,但这 ...
- 完美解决ListView中事件ItemCreated中使用ClientID导致插入数据失败
于昨天晚上看到视频做到这个例子,但是发现始终有错误,在ListView的ItemCreated事件中使用了ClientID则会导致数据插入数据库失败.当点击插入按钮时,网页就像点击F5刷新一样,无任何 ...
- Android 解决ListView中每一项与button冲突
在listView的item里面如果有button,ImageButton等控件,会使得ListView不会被点击,解决方法是: ①在Button上面添加属性 android:focusable=&q ...
- 转载---解决 eclipse 中发布的java-web工程,jar包无法发布到tomcat 的lib下。
1.首先: Server Locations修改后会变灰,如果需要更改设置,则需要移除与Tomcat服务器关联的项目,同时,鼠标右键菜单Clean清除Tomcat服务器的状态^^就可以修改了. 此时E ...
- 在ListView中添加EditText丢失光标问题解决
<ListView android:id="@android:id/list" android:layout_height="fill_parent& ...
- 解决ListView中Item的子控件与Item点击事件冲突
常常会碰到在ListView中点击当中一个Item.会一并触发其子控件的点击事件.比如Item中的Button.ImageButton等.导致了点击Item中Button以外区域也会触发Button点 ...
随机推荐
- 通过爬虫代理IP快速增加博客阅读量——亲测CSDN有效!
写在前面 题目所说的并不是目的,主要是为了更详细的了解网站的反爬机制,如果真的想要提高博客的阅读量,优质的内容必不可少. 了解网站的反爬机制 一般网站从以下几个方面反爬虫: 1. 通过Headers反 ...
- Bootstrap系列 -- 28. 下拉菜单状态
下拉菜单项的默认的状态(不用设置)有悬浮状态(:hover)和焦点状态(:focus). 下拉菜单项除了上面两种状态,还有当前状态(.active)和禁用状态(.disabled).这两种状态使用方法 ...
- Object C学习笔记24-关键字总结
学习Object C也有段时间了,学习的过程中涉及到了很多Object C中的关键字,本文总结一下所涉及到的关键字以及基本语法. 1. #import #import <> 从syste ...
- CoffeeScript及相关文本标记语言
粗步看了下CoffeeScript(简称cs),发现cs这玩意还是有些问题,当然最大的问题之一是缺乏称手的工具.要是能放VS里编译调试当然好.但是转来转去的,真不如直接多敲几个JS字符串. 问题之二就 ...
- SQL修改表结构之添加主键,添加IDENTITY属性
设计一张表时没有考虑到主键Id及自增长,现又需要,原脚本: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[F ...
- js中定时器的使用
1.setInterval <!DOCTYPE html> <html> <head> <title>json</title> <sc ...
- WCF 入门(29)
前言 最近工作比较忙,加了会班就不想再写东西了,就想洗洗睡. 但是这个视频真的不能断,不能像过去一样写了几集就停了. 现在公司在做一个MVC框架的项目,话说已经一年没有写MVC了,重新上手的感觉还可以 ...
- jQuery基础之(二)jQuery中的$
在jQuery中,最常用的莫过于使用美元符号$,它提供了各种各样的丰富功能.包括选择页面中一个或者一类元素.作为功能函数的前缀.windows.onload的完善,创建DOM节点等.本文介绍jQuer ...
- RESTful WebService入门(转)
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://lavasoft.blog.51cto.com/62575/229206 REST ...
- 拦路虎:jQuery
1. color设置无效的问题! $("#subscribe").hover(function(){ var $this = $("#subscribe .subsc ...