文档章节

Android开发之ListView+EditText-要命的焦点和软键盘问题解决办法

yolinfeng
 yolinfeng
发布于 2015/03/10 00:44
字数 482
阅读 60
收藏 1

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

//这个是设置EditText添加到行的Layout时需要的属性,高度无所谓,宽度要填满父容器,别手动设置宽度dp

private LayoutParams fillParentLayoutParams = new LinearLayout.LayoutParams(

        LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT);

private int index = -1;


public View getView(final int position, View convertView, ViewGroup parent) {

        // 这个地方就是决定convertView是否重用的,一定要判断!

        if(convertView == null) {

                convertView = new LinearLayout(activity);
        }

        else{

                // 因为项目中每一行的控件究竟有什么都不确定,所以清掉layout里的所有控件,你的项目视情况而定。

                ((LinearLayout) convertView).removeAllViews(); 

        }

        // 不要直接new一个Layout去赋值给convertView!!那样就不是重用了,否则,后果自负~~


        EditText editText = new EditText(activity);

        // 你可以试试把addView放到这个函数的return之前,我保证你会后悔的~~

       // 因为前面说过,addView的先后对画面的结果是有影响的。

        ((LinearLayout) convertView).addView(editText, fillParentLayoutParams);


        editText.setOnTouchListener(new OnTouchListener() {

                public boolean onTouch(View view, MotionEvent event) {

                        // 在TOUCH的UP事件中,要保存当前的行下标,因为弹出软键盘后,整个画面会被重画

                        // 在getView方法的最后,要根据index和当前的行下标手动为EditText设置焦点 

                        if(event.getAction() == MotionEvent.ACTION_UP) {

                                index= position;

                        }

                        return false;

                }

        });

        

        editText.addTextChangedListener(new TextWatcher(){

                public void afterTextChanged(Editable editable) {

                }

                public void beforeTextChanged(CharSequence text, int start, int count, int after) {

                }

                public void onTextChanged(CharSequence text, int start, int before, int count) {

                        // 在这个地方添加你的保存文本内容的代码,如果不保存,你就等着重新输入吧

                        // 而且不管你输入多少次,也不会有用的,因为getView全清了~~

                }

        });


        // 这个地方可以添加将保存的文本内容设置到EditText上的代码,会有用的~~


        editText.clearFocus();

        if(index!= -1 && index == position) {

               // 如果当前的行下标和点击事件中保存的index一致,手动为EditText设置焦点。

                editText.requestFocus();

        }


       // 这个时候返回的东东,就是ListView对应行下标的那一行的内容。

        return convertView;

}

本文转载自:http://blog.163.com/jekyll_zhou@126/blog/static/18204738201432811155316/

yolinfeng
粉丝 12
博文 196
码字总数 11946
作品 0
珠海
架构师
私信 提问
android开发键盘把导航顶上去了解决办法

解决办法,在mainfest.xml中,在和导航条相关的Activity中加: <activity android:name=".filing.AddFilingActivity" android:windowSoftInputMode="adjustResize|stateHidden" /> android:w......

EDIAGD
2014/05/19
4K
0
Android 软键盘盖住输入框或者布局的解决办法

当在Android的layout设计里面如果输入框过多,则在输入弹出软键盘的时候,下面的输入框会有一部分被软件盘挡住,从而不能获取焦点输入。 解决办法: 方法一:在你的activity中的oncreate中s...

Cory
2013/08/15
14.9K
2
Android 输入法键盘和activity页面遮挡问题解决

相信大家在开发时会遇到弹出软键盘后,输入框上移就看不到输入框了,其实只要将Webview放到了ScrollView中,将ScrollView改为LinearLayout问题解决了,不会在弹出软键盘后大幅滚动。不过下面...

红豆与绿豆
2015/10/29
214
0
Android开发中EditText获得焦点弹出输入框改变屏幕布局

再AndroidManifest.xml 中设置 Activity的属性

lanyu96
2018/12/26
60
0
实现输入界面适应键盘的显示和隐藏事件

方法一、设置activity的windowSoftInputMode属性 在AndroidManifest配置activity的windowSoftInputMode为“adjustResize”,一般能解决问题。 其他取值说明: "stateUnspecified" 软键盘的状......

HCMore
2014/01/15
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

web前端入门到实战:图解原生dialog标签(非常详细)

在html5中,新增了很多语义化的标签。如footer、header之类的,今天的主角是dialog标签 顾名思义,就是用来定义对话框的。目前只有Chrome和Safari支持该标签,所以用的不多,不过确实挺好用的...

梦想编程
21分钟前
3
0
一些php常用函数积累

本文链接<?php// id: ecffe70d3af54df9bad97b61918ace7d global $ct_path, $ct_log_path;$log_path = "test_php.txt";// 是否先log到buffer,再通过CT_flush()一次性写入文件$......

一字见心
22分钟前
3
0
IntelliJ idea中 注释代码折叠

visual studio中有#region 可以折叠代码,IntelliJ idea 中也有类似功能 //region 描述代码//endregion

format
22分钟前
4
0
oracle表中更改主键

一、数据表有主键但无主键约束名 先删除之前的主键,后添加主键 ,执行SQL: a. alter table 表名 drop primary key; b. alter table 表名 add primary key(想要更改的字段名称); 二、数据表...

_Somuns
24分钟前
3
0
jQuery AJAX提交表单

我有一个名称为orderproductForm的表单,输入的数量不确定。 我想做某种jQuery.get或ajax或类似的事情,它将通过Ajax调用页面,并发送所有形式为orderproductForm的输入。 我想一种方法是做类...

技术盛宴
29分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部