編輯:關於Android編程
我有篇博客教大家如何利用 convertView 以及 viewHolder(static) 改善 ListView 卡頓情況;但是在 ListView 加載大量復雜布局和圖片的時候,即使使用了 convertView 和 viewHolder,ListView還是卡頓,本文主要討論了如何在加載復雜 list_item 同時保證 ListView 流暢性。
核心思想是
監聽滑動據加載,異步加載數據。
getView 函數一定不能耗時,有耗時任務要異步加載。
主要的方法:
先判斷當前 ListView 的狀態,只有 ListView 停止滑動才開啟新線程加載數據,其他狀態均忽略。
使用 getFirstVisiblePosition 和 getLastVisiblePosition 方法來顯示 item。
耗時任務一定不要在 getView 方法中進行,最好異步進行。
具體代碼如下:
1 //1. 判斷listView狀態
2 AbsListView.OnScrollListener onScrollListener = new AbsListView.OnScrollListener() {// ListView
3 // 觸摸事件
4
5 public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
6 }
7
8 public void onScrollStateChanged(AbsListView view, int scrollState) {
9 switch (scrollState) {
10 case AbsListView.OnScrollListener.SCROLL_STATE_FLING:// 滑動狀態
11 threadFlag = false;
12 break;
13 case AbsListView.OnScrollListener.SCROLL_STATE_IDLE:// 停止
14 threadFlag = true;
15 startThread();//開啟新線程,加載數據
16 break;
17 case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:// 觸摸listView
18 threadFlag = false;
19 break;
20 default:
21 // Toast.makeText(contextt, default,
22 // Toast.LENGTH_SHORT).show();
23 break;
24 }
25 }
26 };
相信做到以上三點,就能運用自如的使用 ListView了,O(∩_∩)O哈哈~
對我來說,寫自定義view是一個特麻煩但是寫完之後特有成就感的過程。寫完之後我總是喜歡拿給別人看,去炫耀(當然只是在自己熟悉和關系不錯的人群裡),盡管它們看起來會很簡陋。
smalidea smalidea是一個IntelliJ IDEA/Android Studio smali語言插件,可實現動態調試smali代碼。 github地址
動態加載是什麼應用在運行的時候通過加載一些本地不存在的可執行文件實現一些特定的功能,Android中動態加載的核心思想是動態調用外部的Dex文件,極端的情況下,Andro
這幾天還是在做那個項目 有一個部分是需要有一個類似微信朋友圈那樣的功能 開始自己實現是用RecycleView嵌套RecycleView 然後已經把別的弄好了 動態圖片那