ListView 和ScrollView共存问题(一)

来源:互联网 发布:电子章制作软件 编辑:程序博客网 时间:2024/06/02 06:59

解决共存问题间断的研究了一些时间,对于两个控件的属性熟悉是最重要的


目前存在这个问题,输入法能够正确的顶起listview,但是点击listview的一个item,整个列表就会自动的滚动到底部,一开始以为是listview自己更新了数据,后来发现其实就是listview的一个属性的问题,这个属性的代码中进行控制才可以正确的显示


一开始在adapter中设置,监听position然后发现到最后一个了,就设置listview的

if (position == getInfos().size()-1) {((HaomsgInfoActivity)context).lv_sms_list.setTranscriptMode(AbsListView.TRANSCRIPT_MODE_DISABLED);}
这种情况显然不够完整,需要根据情况做这些处理,测试组提出问题后,就这块进行了重新处理,前提是少费事,少改动

是这么处理的:

if (scrollState== SCROLL_STATE_FLING) {lv_sms_list.setTranscriptMode(AbsListView.TRANSCRIPT_MODE_DISABLED);}
lv_sms_list.setOnScrollListener(new OnScrollListener() { //全部代码@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {invokeInput();if (!noNeedLoad) {  //检测如果不是向下滑动,而是向上滑动if (scrollState== SCROLL_STATE_FLING) {   //滑动静止再去加载不然会执行多遍 2013-8-28 11:24 yang// 加载分页 ,不用状态锁的话可以考虑线程队列if (!isLoadingPage && view.getFirstVisiblePosition() == 0) {Log.v("aaa", "!isLoadingPage = "+!isLoadingPage);Log.v("aaa", "view.getFirstVisiblePosition() = "+view.getFirstVisiblePosition());if (view.getLastVisiblePosition() + 1 == view.getCount()) {// 末尾也在当前页则不用加载分页了,否则在select后末尾项看不全Log.v("aaa", "view.getLastVisiblePosition() + 1 = "+(view.getLastVisiblePosition() + 1));Log.v("aaa",  "view.getCount() = "+view.getCount());} else{getNetMessage(type);getNewPageDate(currentIndex, pageSize,REFRESH_LISTVIEW_ADD_NEWPAGE);}}}}if (scrollState== SCROLL_STATE_FLING) {lv_sms_list.setTranscriptMode(AbsListView.TRANSCRIPT_MODE_DISABLED);}}





设置了的自动滚动属性之后,以后不管怎么改都不可以改过来,

=================================================

et_send_content.setOnFocusChangeListener(new OnFocusChangeListener() { //监听焦点变化也就是键盘的弹起@Overridepublic void onFocusChange(View v, boolean hasFocus) {if (hasFocus&&getInputManager().isActive()) {lv_sms_list.setTranscriptMode(AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);adapter.notifyDataSetChanged();}}});


不过这种方法不管用,焦点变化了改变listview但是滚动不及时


=================================================


et_send_content.setOnTouchListener(new OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {if (event.getAction()==MotionEvent.ACTION_DOWN) {lv_sms_list.setTranscriptMode(AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);}return false;}});这里是设置ListView的滑动属性为总是滑动,因为点击了输入框,键盘要被弹起来了,这个时候listView就要被滑动了

主题目的,1) listview滑动静止设置自动滚动属性为不可滑动  2)点击edit开始键入字符时listview自动被顶起 

注意:监听焦点变化,不如监听点击(点击相应时间更早,比焦点更快的预处理)

原创粉丝点击