package com.netease.nim.uikit.common.ui.listview;
import android.annotation.TargetApi;
import android.os.Build;
import android.view.View;
import android.widget.ListView;
public class ListViewUtil {
public static boolean isLastMessageVisible(ListView messageListView) {
if(messageListView == null || messageListView.getAdapter() == null) {
return false;
}
if (messageListView.getLastVisiblePosition() >= messageListView.getAdapter().getCount() - 1 - messageListView.getFooterViewsCount()) {
return true;
} else {
return false;
}
}
//index是items的index,不包含header
public static Object getViewHolderByIndex(ListView listView, int index) {
int firstVisibleFeedPosition = listView.getFirstVisiblePosition() - listView.getHeaderViewsCount();
int lastVisibleFeedPosition = listView.getLastVisiblePosition() - listView.getHeaderViewsCount();
//只有获取可见区域的
if (index >= firstVisibleFeedPosition && index <= lastVisibleFeedPosition) {
View view = listView.getChildAt(index - firstVisibleFeedPosition);
Object tag = view.getTag();
return tag;
} else {
return null;
}
}
public interface ScrollToPositionListener {
void onScrollEnd();
}
public static void scrollToBottom(ListView listView) {
scrollToPosition(listView, listView.getAdapter().getCount() - 1, 0);
}
public static void scrollToBottom(ListView listView, ScrollToPositionListener listener) {
scrollToPosition(listView, listView.getAdapter().getCount() - 1, 0, listener);
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public static void scrollToPosition(ListView messageListView, int position, int y) {
scrollToPosition(messageListView, position, y, null);
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
private static void scrollToPosition(final ListView messageListView, final int position, final int y, final ScrollToPositionListener listener) {
messageListView.post(new Runnable() {
@Override
public void run() {
messageListView.setSelectionFromTop(position, y);
if (listener != null) {
listener.onScrollEnd();
}
}
});
}
}