2011-10-04 109 views
1

我正在嘗試創建一個簡單的聊天佈局。ListView跳轉到頂部修改頁腳

我有一個ListView與transcriptMode =「alwaysScroll」和setStackFromBottom(true)。 ListView有一個帶有EditText和一個按鈕的頁腳(這是一個頁腳,因爲我希望它可以隨列表一起滾動)。

每當用戶鍵入EditText,我使用TextWatcher更改按鈕上的文本。

問題是,當使用物理鍵盤時,每個字母都會將列表滾動到頂部,並防止其他字母進入EditText。 它工作正常使用軟鍵盤...

我認爲這可能與頁腳是改變呼叫轉接器刷新,但它似乎並沒有做好自己。

這是一個Android的錯誤還是我錯過了什麼?

謝謝。

編輯: 另一個重要的事情,我忘了添加,很奇怪,當輸入任何字母滾動到頂部,但刪除字符時,它工作正常,相同的afterTextChanged被調用。

回答

1

嗯,看來我已經解決了它,

的afterTextChanged在ListView被迫重新佈局使其跳到頂端(這應該有已經跳到底部,因爲我已經設置了stackFromBottom)。

無論如何,我已經將一些視圖從wrap_content切換到了其他替代方案,並將隱藏視圖上的可見性「去除」切換爲「隱形」,以便在每個字母后都不必調用onMeasure, 。

希望這可以幫助別人......

+0

請接受您的答案。這有助於我們保持stackoverflow乾淨,並感謝您回來並更新問題與你的答案! – bluefalcon

+0

我打算去,但它說我明天只能接受它......所以我想我會接受它然後 – marmor

+0

這幫助了我,所以謝謝。對我來說,我只需要將EditText的寬度從wrap_content更改爲match_parent,以便它不會導致重新佈局發生。 – Wex

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 }); 
+0

嘿,感謝。 我不需要捕捉滾動事件,我想停止滾動,它不應該滾動時輸入... – marmor