3

チャット アプリケーションのように、メッセージを送信するたびにソフト キーパッド ポップアップが表示され、ソフト キーパッドの後ろに何も隠れていない限り、最後に表示されたメッセージがソフト キーパッドの上部に自動スクロールされます。しかし、私の場合、キーパッドは会話を隠します。この問題を修正する方法と、メッセージを表示するためのリサイクラー ビューを使用しました。使ったandroid.support.v7.widget.RecyclerView

4

3 に答える 3

2

これを処理する方法は非常に単純で、Whatsapp やその他の一般的なチャットと同様に、1 つの適切な動作を実現します。

まず、LinearLayoutManagerこのように設定します。

 new LinearLayoutManager(this.getContext(), LinearLayoutManager.VERTICAL, true);
 chatLayoutManager.setStackFromEnd(true);

メッセージが最下部でオーバーフローし始めるとRecyclerView、現在の位置を 0 に設定する必要があります。これを実現するには、単純なインターフェイスが魔法のように機能しRecyclerView.Adapter、最後のメッセージがレンダリングされたときに警告します。

public interface OnLastItemRendered{

    void lastItemRendered();

}

インターフェイスの実装をアクティビティ/フラグメントから de に渡してでRecyclerView.Adapter呼び出します。scrollToPositionRecyclerView

new ChatMessageListAdapter(
    context, user, lastOldMessages,
    new OnLastItemRendered() {

        @Override
        public void lastItemRendered() {

            ContainerFragment.this.myRecyclerViewToChat.scrollToPosition(0);
    }
});

最後に、 でアニメーションを実行する場合は、メソッドの呼び出しの最後にRecyclerViewメッセージを追加するメソッドを 1 つ実装します。RecyclerView.AdapternotifyItemInserted

public void add(ChatMessage chatMessage) {

    if (this.chatMessages == null) {

        this.chatMessages = new ArrayList<ChatMessage>();
    }

    this.chatMessages.add(chatMessage);

    Collections.sort(this.chatMessages, this.orderChatMessagesComparator);

    this.notifyItemInserted(0);

    this.onLastItemRendered.lastItemRendered();
}

そして、最初にロードされた X メッセージについては、onBindViewHolder.

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {

    final ChatMessage currentMessage = this.chatMessages.get(position);

    ... //Do your stuff.

    if (position == 0) this.onLastItemRendered.lastItemRendered();
}

作業完了。

于 2016-04-27T18:06:19.000 に答える
0

編集テキストのフォーカスを検出できます。editText にフォーカスがある場合は、recyclerView リストを最後の要素までスクロールします。

private OnFocuseChangeListener focuseListener = new OnFocuseChangeListener(){
  public void onFocusChange(View v, boolean hasFocus){
            if(hasFocus){

            // Scroll down to the last element of the list
            recyclerView.scrollToPosition(sizeOfYourList);

          } else {
              focusedView  = null;
        }
    }
}

同様に、送信ボタンをクリックするとき、またはリストの最後の要素を表示したい場所で scrollToPosition () を使用します。

于 2015-09-21T09:08:59.663 に答える