diff options
| -rwxr-xr-x | org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java | 30 | ||||
| -rwxr-xr-x | org.fox.ttrss/src/main/java/org/fox/ttrss/MasterActivity.java | 14 |
2 files changed, 33 insertions, 11 deletions
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java index e008173a..b98aa6c8 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java @@ -459,12 +459,11 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment implements new Handler().postDelayed(() -> m_activity.refresh(false), 100); } - int lastVisibleItem = m_layoutManager.findLastVisibleItemPosition(); + /* int lastVisibleItem = m_layoutManager.findLastVisibleItemPosition(); - if (lastVisibleItem >= Application.getArticles().size() - 5) + if (lastVisibleItem >= Application.getArticles().size() - 5) { refresh(true); - - new Handler().postDelayed(() -> refresh(true), 0); + } */ } } @@ -494,8 +493,8 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment implements } } - /* if (lastVisibleItem >= Application.getArticles().size() - 5) - new Handler().postDelayed(() -> refresh(true), 1000); */ + if (lastVisibleItem >= Application.getArticles().size() - 5) + new Handler().postDelayed(() -> refresh(true), 1000); } }); @@ -1423,16 +1422,31 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment implements } public void scrollToArticleId(int id) { - m_list.scrollToPosition(Application.getArticles().getPositionById(id)); + int position = Application.getArticles().getPositionById(id); + + if (position != -1) + m_list.scrollToPosition(position); } public void setActiveArticleId(int articleId) { if (m_list != null && articleId != m_activeArticleId) { + ArticleList articles = Application.getArticles(); + + int oldPosition = articles.getPositionById(m_activeArticleId); + int newPosition = articles.getPositionById(articleId); + m_activeArticleId = articleId; - m_adapter.notifyDataSetChanged(); + + if (oldPosition != -1) + m_adapter.notifyItemChanged(oldPosition); + + m_adapter.notifyItemChanged(newPosition); scrollToArticleId(articleId); + + if (newPosition >= articles.size() - 5) + refresh(true); } } diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/MasterActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/MasterActivity.java index 9430ddc2..911d8ed7 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/MasterActivity.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/MasterActivity.java @@ -530,10 +530,18 @@ public class MasterActivity extends OnlineActivity implements HeadlinesEventList if (hf != null) { hf.notifyUpdated(); - // this makes position in headlines in master activity (not quite) randomly jump around when returning - // even if active article hasn't been changed, i guess keeping it as-is is a lesser evil? - hf.scrollToArticleId(data.getIntExtra("activeArticleId", 0)); + // data might be null if detailactivity crashed + if (data != null && data.getExtras() != null) { + int activeArticleId = data.getIntExtra("activeArticleId", 0); + + Log.d(TAG, "got back from detail activity, scrolling to id=" + activeArticleId); + + hf.scrollToArticleId(activeArticleId); + } } + + // just in case + new Handler().postDelayed((Runnable) () -> hf.refresh(true), 250); } } |