【问题标题】:Push to refresh on android as in gmail (and not pull to refresh like on iphone)像在 gmail 中一样在 android 上推送刷新(而不是像在 iphone 上那样拉刷新)
【发布时间】:2012-05-05 13:13:51
【问题描述】:

已经有many requests在android上推送刷新widgetlibrary,即使有些人认为它不是good ui pattern(我必须说我属于这个阵营)。

但是“拉刷新”或者更准确地说:在 gmail 中用于 android 4 的机制。当你到达列表的底部时,你会得到最后一个元素。但是,如果您再次向上滚动(推),则会出现一个带有无限进度条的新列表项,接下来的邮件将加载并填满列表。

Other android coders and UI designers have noticed that,但我找不到关于这个模式的任何好的辩论,我也找不到这个特性的实现来填充列表。

有没有人看到这个问题的有趣解决方案?

【问题讨论】:

  • 那不就是自动刷新吗?就像您自动将新项目添加到列表顶部一样。这里的问题是,如果您在列表中的任何位置更改内容,它就不起作用。

标签: android list refresh ui-design


【解决方案1】:

您可以尝试自己实现它。很简单:

我是怎么做到的:

1) 设置列表视图的 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;        

}

【讨论】:

  • 好答案!我只想补充一点,在适配器中有一个标志,一旦我们没有得到任何新数据,我们可以使用它来停止显示“加载视图”。我们可以像这样在 getItemViewType() 中使用它: if (position == (getCount() - 1) && shouldShowProgress) {...}
  • 为了显示/隐藏进度微调器,最好使用 ListView 方法:addFooterView(View view)removeFooterView(View view)跨度>
【解决方案2】:

【讨论】:

  • @Mohammed khalloufi,谢谢 Mohammed,但我正在寻找一个 push 来刷新库,而不是 pull 来刷新一个。
猜你喜欢
  • 1970-01-01
  • 2013-06-03
  • 2015-11-28
  • 1970-01-01
  • 1970-01-01
  • 2010-12-10
  • 1970-01-01
  • 2021-08-20
  • 1970-01-01
相关资源
最近更新 更多