安卓之listview和textview争抢焦点的解决办法

查找了网上很多文章,说是在XML文件设置textview的focus为false ,简直是一派胡言,那样连文本都输入不了了,有何用

网上查找无果,改用java代码控制listview的longclick方法,实现弹出复制和删除listview的办法

自定义一个popWindow

private void initPopupWindow(LayoutInflater inflater) {

View view = inflater.inflate(R.layout.pop_item_layout, null);

popupWindow = new PopupWindow(view, 100, 50);

// popupWindow.setWidth(LayoutParams.WRAP_CONTENT);

// popupWindow.setHeight(LayoutParams.WRAP_CONTENT);

copyTv = (TextView) view.findViewById(R.id.pop_copy_tv);

deleteTv = (TextView) view.findViewById(R.id.pop_delete_tv);

}

然后自己写一个监听方法

class tvOnTouch implements OnTouchListener {

private Context mContext;

private int mPosition;

public tvOnTouch(Context context, int position) {

// TODO Auto-generated method stub

this.mContext = context;

this.mPosition = position;

}

@Override

public boolean onTouch(View v, MotionEvent event) {

// TODO Auto-generated method stub

if (v.getId() == R.id.pop_copy_tv) {

TextView tv = (TextView) v;

if (event.getAction() == MotionEvent.ACTION_DOWN) {// 按下

tv.setTextColor(0xff00CD66);

} else if (event.getAction() == MotionEvent.ACTION_UP) {// 弹起

tv.setTextColor(0xffffffff);

com.robot.utils.TextManager.copyText(mContext, mDatas.get(mPosition).getMsg());

Toast.makeText(mContext, "复制成功", SHOW_TIME).show();

if (popupWindow != null) {

popupWindow.dismiss();

}

}

} else {

TextView tv = (TextView) v;

if (event.getAction() == MotionEvent.ACTION_DOWN) {// 按下

tv.setTextColor(0xff00CD66);

} else if (event.getAction() == MotionEvent.ACTION_UP) {// 谈起

tv.setTextColor(0xffffffff);

mDatas.remove(mPosition);

notifyDataSetChanged();

Toast.makeText(mContext, "删除成功", SHOW_TIME).show();

if (popupWindow != null) {

popupWindow.dismiss();

}

}

}

return true;

}

}

最后在getview里加入监听事件

viewHolder.content.setOnLongClickListener(new OnLongClickListener() {

@Override

public boolean onLongClick(View v) {

// TODO Auto-generated method stub

showPop(v);

copyTv.setOnTouchListener(new tvOnTouch(mContext, position));

deleteTv.setOnTouchListener(new tvOnTouch(mContext, position));

return false;

}

});

时间: 2024-11-10 07:37:21

安卓之listview和textview争抢焦点的解决办法的相关文章

用BaseAdapter适配ListView只显示了一行的解决办法

今天我用BaseAdapter去适配一个ListView,结果只显示了一行,原来应该是有那个ArrayList<...>的size行的数据的.很奇怪. 我是这样写的ListView所在Layout.xml: 1 <?xml version="1.0" encoding="utf-8"?> 2 <ScrollView 3 android:layout_width="match_parent" 4 android:lay

安卓源码编译遇到的错误及解决办法

1. make: *** [out/host/linux-x86/obj/EXECUTABLES/llvm-rs-cc_intermediates/slang_rs_export_foreach.o] 错误 1 在工程根目录下,打开下面的makefile文件:源码目录 frameworks/compile/slang/Android.mk .在打开的makefile文件中按照下面更改:#local_cflags_for_slang := -Wno-sign-promo -Wall -Wno-un

重启后“安卓正在升级,正在优化程序”的解决办法

这个现象是升级到4.2.2,再装上4.2.2的Google包以后出现的.自己安装的apps越多,每次重启后需要等待的时间就越多,因为系统会提示“正在优化1/50个应用”,一直到把所有已安装的应用都优化一遍为止.到国外论坛里问了一圈以后,发现是这两个文件在作怪: /system/framework/com.google.widevine.software.drm.odex/system/framework/com.google.widevine.software.drm.jar 试图在RE中删除,

jquery的blur之后,focus获取不到焦点的解决办法

一:很多童鞋可能会遇到这种情况: jquery的blur之后,focus获取不到焦点. 二:使用场景: 用户填写信息的时候,若邮箱为空,则提示 请填写邮箱,并将光标置于填写邮箱的文本框里,方便用户的再次输入. 想当然的我们会使用jquey的blur()和focus()两个函数来实现上面的需求: $("#email").blur(function(){ if($("#email").val()==''){ alert('请填写您的邮箱'); $("#emai

关于安装安卓SDK出现无法更新问题时的解决办法

近日,如果安装过安卓的同学可能知道,大家在使用Android SDK升级或者安装SDK的时候,出现了访问Failed to fetch URL http://dl-ssl.google.com/android/repository/addons_list-9.xml 的情况.按照网上提供的方案,已经没办法继续使用了,这个时候,别慌.其实当你看到这篇文章的时候,https://www.google.com.hk是已经访问不了了.具体原因,不便解释.好了,我现在很正经的说说怎么去解决出现Failed

在安卓主线程不能发送网络请求的解决办法

第一种方法: 在主线程中加入这段代码,强制在主线程执行网络请求 if (android.os.Build.VERSION.SDK_INT > 9) { StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); } 第二种方法: 利用安卓系统自带的异步执行,将网络请求的代码加入在里面 new Async

ScrollView viewPager ListView 结合使用的问题及解决办法

1. 解决ScrollView 和viewPager滑动冲突的问题 需要重写ScrollView ,使得viewpager获取到横向滑动事件 代码如下 public class PagerScrollView extends ScrollView { private GestureDetector mGestureDetector; public PagerScrollView(Context context, AttributeSet attrs, int defStyle) { super(

H5 video安卓默认点击不能全屏播放解决办法

调用方法: autoFullScrenn(obj) 还有一篇: 使用MediaElement.js构建个性的HTML5音频和视频播放器 var fullscreen = function(elem) { var prefix = 'webkit'; if ( elem[prefix + 'EnterFullScreen'] ) { return prefix + 'EnterFullScreen'; } else if( elem[prefix + 'RequestFullScreen'] )

bluestacks安装安卓引擎时出现2502 2503错误的解决办法

2503代表工作站无法启动.2502代表下面的程序调用不支持的MS-DOS函数. 以管理员身份运行命令提示符在经典桌面使用快捷键Win+X,出现一个菜单,选择“命令提示符(管理员) ”即可以以管理员身份运行命令提示符(也就是进通常所说的cmd )输入msiexec /package "你的安装文件的全路径"也就是说我要安装123.msi 这个文件的话就是:msiexec /package "d:\program\123.msi" 一般情况下就可以解决问题了~ 建议去