我正在尝试创建一个简单的聊天布局。
我有一个带有transcriptMode =“alwaysScroll”和setStackFromBottom(true)的ListView。 ListView有一个带有EditText和一个按钮的页脚(它是一个页脚,因为我希望它与列表一起滚动)。
每当用户输入EditText时,我都会使用TextWatcher更改按钮上的文字。
问题在于,当使用物理键盘时,每个键入的字母都会将列表滚动到顶部,并阻止其他字母进入EditText。 软键盘可以正常工作......
我认为这可能与更改调用适配器进行更改的页脚有关,但似乎并非如此。
这是Android错误还是我错过了什么?
感谢。
编辑: 我忘记添加的另一个重要的事情,并且非常奇怪,当键入任何字母时滚动到顶部,但是当删除字符时它工作正常,同样的afterTextChanged被调用。
答案 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 });