ListView在修改页脚时跳转到顶部

时间:2011-10-04 16:59:48

标签: android listview

我正在尝试创建一个简单的聊天布局。

我有一个带有transcriptMode =“alwaysScroll”和setStackFromBottom(true)的ListView。 ListView有一个带有EditText和一个按钮的页脚(它是一个页脚,因为我希望它与列表一起滚动)。

每当用户输入EditText时,我都会使用TextWatcher更改按钮上的文字。

问题在于,当使用物理键盘时,每个键入的字母都会将列表滚动到顶部,并阻止其他字母进入EditText。 软键盘可以正常工作......

我认为这可能与更改调用适配器进行更改的页脚有关,但似乎并非如此。

这是Android错误还是我错过了什么?

感谢。

编辑: 我忘记添加的另一个重要的事情,并且非常奇怪,当键入任何字母时滚动到顶部,但是当删除字符时它工作正常,同样的afterTextChanged被调用。

2 个答案:

答案 0 :(得分:1)

好吧,看起来我已经解决了,

afterTextChanged强制在ListView中重新布局,导致它跳转到顶部(因为我已经设置了stackFromBottom,所以它应该跳到底部)。

无论如何,我已经将一些视图从wrap_content切换到其他替代方案,并从使用隐藏视图上的'gone'切换到'invisible',以便在每个字母之后不必调用onMeasure并且它可以工作。

希望这有助于某人...

答案 1 :(得分:0)

看看这有助于via this site

//Here is where the magic happens
02  this.getListView().setOnScrollListener(new OnScrollListener(){
03   
04      //useless here, skip!
05      @Override
06      public void onScrollStateChanged(AbsListView view, int scrollState) {}
07   
08      //dumdumdum
09      @Override
10      public void onScroll(AbsListView view, int firstVisibleItem,
11          int visibleItemCount, int totalItemCount) {
12   
13          //what is the bottom iten that is visible
14          int lastInScreen = firstVisibleItem + visibleItemCount;            
15   
16          //is the bottom item visible & not loading more already ? Load more !
17          if((lastInScreen == totalItemCount) && !(loadingMore)){
18              Thread thread =  new Thread(null, loadMoreListItems);
19              thread.start();
20          }
21      }
22  });