Android EditText中插入话题模块的删除处理方法
在 EditText 中添加话题 或者是 @某人 时
看起来挺简单,实际操作会有很多坑爹的问题
private String mTopic;
//光标保持在话题的末尾
mInputEdit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int selectonStart = ((EditText) v).getSelectionStart();
int lastPos = 0;
if (!TextUtils.isEmpty(mCommentName)){
if ((lastPos = mInputEdit.getText().toString().indexOf(mCommentName, lastPos)) != -1) {
if (selectonStart >= lastPos && selectonStart <= (lastPos + mCommentName.length())) {
mInputEdit.setSelection(lastPos + mCommentName.length());
}
}
}else {
if ((lastPos = mInputEdit.getText().toString().indexOf(mTopic, lastPos)) != -1) {
if (selectonStart >= lastPos && selectonStart <= (lastPos + mTopic.length())) {
mInputEdit.setSelection(lastPos + mTopic.length());
}
}
}
}
});
//删除话题 或者@某人
mInputEdit.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DEL && event.getAction() == KeyEvent.ACTION_DOWN) {
//当为删除键并且是按下动作时执行
int selectionStart = mInputEdit.getSelectionStart();
int lastPos = 0;
if (!TextUtils.isEmpty(mCommentName)){
if ((lastPos = mInputEdit.getText().toString().indexOf(mCommentName, lastPos)) != -1) {
if (selectionStart != 0 && selectionStart >= lastPos && selectionStart <= (lastPos + mCommentName.length())) {
String sss = mInputEdit.getText().toString();
mInputEdit.setText(sss.substring(0, lastPos) + sss.substring(lastPos + mCommentName.length()));
mInputEdit.setSelection(lastPos);
return true;
} else {
lastPos += mCommentName.length();
}
}
} else {
if ((lastPos = mInputEdit.getText().toString().indexOf(mTopic, lastPos)) != -1) {
if (selectionStart != 0 && selectionStart >= lastPos && selectionStart <= (lastPos + mTopic.length())) {
String sss = mInputEdit.getText().toString();
mInputEdit.setText(sss.substring(0, lastPos) + sss.substring(lastPos + mTopic.length()));
list.remove(0);
mTopic = "";
mSelectTopic.setText("");
mInputEdit.setSelection(lastPos);
return true;
} else {
lastPos += mTopic.length();
}
}
}
}
return false;
}
});
Android EditText中插入话题模块的删除处理方法的更多相关文章
- Android EditText中插入图片并响应点击事件
EditText中插入图片基本就是两种方法: ,通过Html.fromHtml(..)来实现 [mw_shl_code=java,true]eText.append(Html.fromHtml(&qu ...
- SQL Server XML基础学习之<7>--XML modify() 方法对 XML 数据中插入、更新或删除
/*------------------------------------------------------------------------------+ #| = : = : = : = : ...
- 转载---SQL Server XML基础学习之<7>--XML modify() 方法对 XML 数据中插入、更新或删除
/*------------------------------------------------------------------------------+ #| = : = : = : = : ...
- 使用PreparedStatement向数据表中插入、修改、删除、获取Blob类型的数据
使用PreparedStatement向数据表中插入.修改.删除.获取Blob类型的数据 2014-09-07 20:17 Blob介绍 BLOB类型的字段用于存储二进制数据 MySQL中,BLOB是 ...
- sql server 还原数据库后,删除用户,提示数据库主体在该数据库中拥有架构,无法删除解决方法
将另一台服务器上的数据库备份文件,在现在用的这台服务器上还原之后,再创建相同的用户名,提示用户已存在 想将之前的用户先删除掉,却提示“数据库主体在该数据库中拥有架构,无法删除解决方法” 在网上找到方法 ...
- 在Android开发中,定时执行任务的3种实现方法
在Android开发中,定时执行任务的3种实现方法: 一.采用Handler与线程的sleep(long)方法(不建议使用,Java的实现方式)二.采用Handler的postDelayed(Runn ...
- Android项目中的各个模块框架设计
作为Android开发,现对项目开发中的各个模块搭建,梳理如下: Android UI框架,开发人员需要达到专家级 网络框架 浏览框架 图片加载框架 图片裁剪压缩工具类 客户端并发框架 线程池设计 ( ...
- 介绍nodejs中的path模块的几个方法
webpack中常用的: var path = require('path') 是nodejs中的path模块,介绍一下webpack中常用的几个path模块的方法: 应用node环境的时候,这个pa ...
- Android 代码中文字在手机上显示乱码问题解决方法
在学习Android过程中,用于测试时发现,代码中的中文在真机上会显示乱码, 网上查阅了些资料,参考如下: http://www.androidchina.net/3024.html http://b ...
随机推荐
- IOS网络第四天 -网络文件上传(0923略)
01-NSURLSession02-断点续传 02-文件上传01-基本的上传 03-文件上传03-代码封装 04-文件上传04-获得MIMEType.mp4 05-文件的压缩和解压缩.mp4 06-压 ...
- HDU 5965 枚举模拟 + dp(?)
ccpc合肥站的重现...一看就觉得是dp 然后强行搞出来一个转移方程 即 根据第i-1列的需求和i-1 i-2列的枚举摆放 可以得出i列摆放的种类..加了n多if语句...最后感觉怎么都能过了..然 ...
- AFNetwork源码解析
1.关于AFRequestSerializer: 这里分好几个部分,我们首先从NSMutableRequest的相关方法来出发: 比如我们要上传一个文件,那么需要些很麻烦的请求体: HTTP请求头我们 ...
- PHP调用MYSQL存储过程实例
PHP调用MYSQL存储过程实例 标签: mysql存储phpsqlquerycmd 2010-09-26 11:10 11552人阅读 评论(3) 收藏 举报 实例一:无参的存储过程$conn = ...
- Android新权限机制 AppOps
http://blog.csdn.net/hyhyl1990/article/details/46842915 http://m.blog.csdn.net/article/details?id=51 ...
- shell (check return of each line)and sudoer
shell result from cmdline echo $? if 0 then success ;else failure (shell 执行每部返回值,rm -rf 错误,打包不能覆盖) 解 ...
- Arduino.h
#ifndef Arduino_h #define Arduino_h #include <stdlib.h> #include <stdbool.h> #include &l ...
- Go语言的GOPATH与工作目录详解
这篇文章主要介绍了Go语言的GOPATH与工作目录详解,本文详细讲解了GOPATH设置.应用目录结构.编译应用等内容,需要的朋友可以参考下 GOPATH设置 go 命令依赖一个重要的环境变量:$GOP ...
- php try catch throw 用法
1.try catch 捕捉不到fatal error致命错误 2.只有抛出异常才能被截获,如果异常抛出了却没有被捕捉到,就会产生一个fatal error. 3.父类可以捕获抛出的子类异常,Exce ...
- LeetCode Power of Four
原题链接在这里:https://leetcode.com/problems/power-of-four/ 题目: Given an integer (signed 32 bits), write a ...