2012-08-23 24 views
8

當收到或發送新消息時,我的ListView應該自動滾動到結束。 但是,當我使用Android鍵盤從ListText下面的EditText發送消息時,ListView重新調整大小,並且我想發送的新消息出現在屏幕外,即使鍵盤消失並且ListView再次調整大小,我也必須向下滾動才能看到它。ListView不滾動到結束,當鍵盤使用

要滾動的ListView使用:

listView.postDelayed(new Runnable() {
@Override public void run() { listView.setSelection(listView.getCount()); } }, 100);

但不是在我的情況下正常工作。

有誰知道它爲什麼會發生?有沒有辦法,總是滾動ListView結束?

非常感謝您的幫助!

+0

當您進入EditText時,您是如何得到顯示鍵盤的事件的? –

回答

8

你可以嘗試後你設置選擇到您的列表中添加這行代碼:

listView.smoothScrollToPosition(listView.getCount()); 

生成的代碼應該是這樣的:

listView.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      listView.setSelection(listView.getCount()); 
      listView.smoothScrollToPosition(listView.getCount()); 
     } 
    }, 100); 
+1

它的工作原理!謝謝! –

1

在活動的清單中將android:windowSoftInputMode設置爲adjustPan|adjustResize

+2

它不工作。我不想修復活動,因爲我在屏幕上還有其他元素,例如左側面板。此問題僅適用於ListView。我想要使​​用總是滾動ListView結束的方法。 –

+0

該文檔具體說這是不可能的 - http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#SOFT_INPUT_ADJUST_RESIZE – Eliezer

16

試試你的代碼的這個INSEAD:

listView.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL); 

(或通過XML佈局設置)。