Есть следующая библиотека: https://github.com/ugurcany/InfiniteListView
Вкратце, она позволяет сделать ListView
с бесконечным скроллом и обновлением, как это реализовано во Вконтакте. Вопрос состоит в том, как правильно восстанавливать состояние этого ListView
при смене конфигурации экрана.
Глянул что там внутри: Этот класс держит внутри себя ListView
public class InfiniteListView<T> extends FrameLayout {
private SwipeRefreshLayout swipeRefreshLayout;
private ListView listView;
private boolean loading = false;
private View loadingView;
private boolean hasMore = false;
private InfiniteListAdapter infiniteListAdapter;
И назначает ему адаптер
public void setAdapter(InfiniteListAdapter<T> infiniteListAdapter) {
this.infiniteListAdapter = infiniteListAdapter;
this.listView.setAdapter(infiniteListAdapter);
this.listView.setOnScrollListener(new OnScrollListener() {
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if(InfiniteListView.this.hasMore) {
int lastVisibleItem = visibleItemCount + firstVisibleItem;
if(lastVisibleItem >= totalItemCount && !InfiniteListView.this.loading) {
InfiniteListView.this.infiniteListAdapter.onNewLoadRequired();
}
}
}
});
this.listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
InfiniteListView.this.infiniteListAdapter.onItemClick(position);
}
});
this.listView.setOnItemLongClickListener(new OnItemLongClickListener() {
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
InfiniteListView.this.infiniteListAdapter.onItemLongClick(position);
return true;
}
});
}
Как видно, там ставится кастомный OnScrollListener
, который, в принципе, мне был бы полезен. Я бы на onScroll
брал позицию firstVisibleItem
и сохранял бы ее куда-нибудь, на время пересоздания экрана, а потом как-нибудь бы проскроливал до этой позиции, но проблема в том, что у всего класса InfiniteListView
поля приватные, кроме того, он наследуется от FrameLayout
'а.
Я пытался сделать что-то типа такого:
public class MyInfiniteListView extends InfiniteListView{
public MyInfiniteListView(Context context){
super(context);
}
public MyInfiniteListView(Context context, AttributeSet attrs){
super(context, attrs);
}
public MyInfiniteListView(Context context, AttributeSet attrs, int defStyle){
super(context, attrs, defStyle);
}
@Override
public void setAdapter(InfiniteListAdapter infiniteListAdapter){
super.setAdapter(infiniteListAdapter);
super.listView.setOnScrollListener(new AbsListView.OnScrollListener() {
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if(InfiniteListView.super.hasMore) {
int lastVisibleItem = visibleItemCount + firstVisibleItem;
if(lastVisibleItem >= totalItemCount && !InfiniteListView.super.loading) {
InfiniteListView.super.infiniteListAdapter.onNewLoadRequired();
}
}
}
});
}
}
Т.е. переопределить хотя бы 1 метод, но сделать этого нельзя ввиду того, что listView
- приватное поле. Как выкручиваться? Ведь судя по всему, у Вконтакте именно эта библиотека (Даже реализация всех анимаций идентичная) и у них сохранение при смене конфигурации присутствует.
P.S. Реверс-инжирингом не хотелось бы заниматься, но если вариантов не будет- полезу внутрь приложения ВК.
Пишу рассылку для клиентов, при использовании ящика gmail или mail, да даже rambler, сообщения передаются, но при попытке использовать корпоративную...
Как исправить наложение dots друг на друга? задавал отступы в pager__item , не помогает https://codepenio/st-iv/pen/PKQWMJ
Вообщем у меня в программе я получаю ссылки вот такого вида