Android GridView和EditText焦点冲突问题
2016-12-08 16:32
465 查看
效果:长按Item可删除该item;edittext中可编辑内容。
用到的属性: android:descendantFocusability
descendantFocusability的值有三种:
beforeDescendants:viewgroup会优先其子类控件而获取到焦点
afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点
走过的路,还是记录一下吧:
1.
//item的布局 item_gridview <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <EditText android:id="@+id/editText" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>
gridview.setAdapter(adapter);
如此,则edittext可编辑,item的长按事件无法捕获到。
2.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:descendantFocusability="blocksDescendants" android:orientation="vertical"> <EditText android:id="@+id/editText" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>
如此,item的长按事件可捕获到,edittext获取不到焦点无法编辑。
3.参考ListView中EditText焦点问题:http://www.cnblogs.com/skyseraph/archive/2013/04/21/3033848.html
4.以上都试过了,都不能实现想要的效果。于是……
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/ll_item" android:orientation="vertical"> <EditText android:id="@+id/editText" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>
自定义的GridViewAdapter,只贴了有用的部分
public class GridViewAdapter extends BaseAdapter { private Context context; private CallBackInterface callBackInterface; public GridViewAdapter(Context context){ this.context=context; } //添加长按监听接口 public void setLongClickCallBack(CallBackInterface backInterface){ this.callBackInterface=backInterface; } @Override public View getView(int position, View convertView, ViewGroup parent) { convertView= LayoutInflater.from(context).inflate(R.layout.item_gridview,null); LinearLayout ll_item= (LinearLayout) convertView.findViewById(R.id.ll_item); EditText editText= (EditText) convertView.findViewById(R.id.editText); ll_item.setOnLongClickListener(new MyLongClickListener(position,callBackInterface)); return convertView; } }
class MyLongClickListener implements View.OnLongClickListener{ private int position; private CallBackInterface backInterface; public MyLongClickListener(int position,CallBackInterface callBackInterface){ this.position=position; this.backInterface=callBackInterface; } @Override public boolean onLongClick(View v) { backInterface.callBack(position); return true; } }
public interface CallBackInterface { public void callBack(int position); }
//初始化adapter后调用长按回调,做相应处理 adapter.setLongClickCallBack(new CallBackInterface() { @Override public void callBack(int position) { //做相应的处理 } }); adapter.notifyDataSetChanged();
其实就是监听父控件的长按事件,实现的效果跟gridview.setonLongClickListener()的监听效果一样。
呵呵呵···,只想说条条大路都能到家~~
相关文章推荐
- xamarin android TextView跑马灯效果和EditText焦点冲突的问题
- [Android]去除EditText自动获得的焦点,解决软键盘弹出问题
- Android EditText不弹出输入法焦点问题的总结
- Android EditText不弹出输入法焦点问题的总结
- 关于Android的EditText焦点问题
- Android EditText不弹出输入法总结,焦点问题的总结
- android的EditText重新获取焦点问题
- Android开发中EditText获得焦点弹出输入框改变屏幕布局的问题
- android之EditText焦点问题
- Android EditText不弹出输入法焦点问题的总结
- Android EditText不弹出输入法总结,焦点问题的总结
- Android开发之ListView+EditText-要命的焦点和软键盘问题解决办法
- Android EditText不弹出输入法焦点问题的总结
- 【Android】ListView中EditText焦点问题
- 【Android开发那点破事】Android EditText不弹出输入法焦点问题
- Android EditText不弹出输入法焦点问题的总结
- Android WebView和EditText焦点冲突解决
- Android的EditText自动获取焦点并弹出输入法问题
- Android 相关知识 EditText焦点相关问题
- Android开发之ListView+EditText-要命的焦点和软键盘问题解决办法