2012-04-24 26 views
2

已有many requests推動刷新widgetlibrary在Android上,即使有人認爲它不是這樣good ui pattern(我必須說我屬於這個陣營)。推在Android上刷新,因爲在Gmail(並不拉動像iphone一樣刷新)

但是,「拉刷新」或更精確的:Android的gmail中使用的機制4.當你到達列表的底部,你會得到最後一個元素。但是,如果再次向上滾動(推),則會出現一個新的列表項,其中包含無限進度條,下一個郵件將加載並填充列表。

Other android coders and UI designers have noticed that,但我找不到有關此模式的任何良好爭論,我也無法找到此功能的實現來填充列表。

有沒有人看到這個問題有趣的解決方案?

+0

是不是像汽車爽快呢?就像您自動將新項目添加到列表頂部一樣。這裏的問題在於,如果您在列表中的任何位置更改內容,則它不起作用。 – zapl 2012-04-24 21:13:10

回答

1

你可以嘗試自己實現它。它很簡單:

我如何做的:

1)設置你的ListView的onScrollStateChange:

@Override 
public void onScrollStateChanged(AbsListView listView, int scrollState) { 
    if (scrollState == SCROLL_STATE_IDLE) { 
     if (listView.getLastVisiblePosition() >= listView.getCount()-1) { 
       //scroll reached the end, trigger the method to load more itens!     
     } 
    } 
} 

2)在你的基地適配器:

private static final int TYPE_VIEW_COUNT = 2; 
private static final int TYPE_VIEW_CONTENT = 0; 
private static final int TYPE_VIEW_LOADING = 1; 

@Override 
public int getItemViewType(int position) { 

    if (position == (getCount()-1)) { 
     return TYPE_VIEW_LOADING; 
    } else { 
     return TYPE_VIEW_CONTENT; 
    }   

} 

@Override 
public int getViewTypeCount() { 
    return TYPE_VIEW_COUNT; 
} 



@Override 
public int getCount() { 
    //return list size + 1; 
} 


@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    View view = null; 

    switch (getItemViewType(position)) { 

    case TYPE_VIEW_CONTENT: 

     //load your content view (using convertView and then...) 

     break; 
    case TYPE_VIEW_LOADING: 
     //load your loading view (indeterminate progressbar) 
     break; 
    } 



    return view;   

} 
+0

很好的答案!我只想補充一點,在適配器中有一個標誌,我們可以在我們沒有得到任何新數據後用它來停止顯示「加載視圖」。我們可以像getItemViewType()那樣使用它:if(position ==(getCount() - 1)&& _shouldShowProgress_){...} – Bandreid 2016-01-29 15:29:00

+0

對於顯示/隱藏進度,最好使用ListView方法:_addFooterView查看)_和_removeFooterView(查看視圖)_ – Bandreid 2016-01-29 18:57:17