使用 SwipeRefreshLayout 从底部滚动到顶部不起作用
Scroll from bottom to top does not work using SwipeRefreshLayout
我已经实现了 SwipeRefreshLayout
并且基本上可以正常工作。 https://developer.android.com/training/swipe/add-swipe-interface.html
我遇到了一个奇怪的问题,当您转到列表底部时,当您尝试滚动到顶部时,SwipeRefreshLayout
会刷新。
那不是我需要的。我只需要滚动到列表的顶部而不刷新 ListView。
我的意思是,根据我们的立场,何时刷新应该是某种条件。正确的?因为当我们在 ListView 的顶部时,预期的行为是允许刷新。
请帮忙。
<android.support.v4.widget.SwipeRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/swiperefresh"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity"
android:orientation="vertical"
>
<SearchView
android:id="@+id/editSearch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:iconifiedByDefault="false"
android:queryHint="Input the number"
/>
<ListView
android:paddingTop="5dp"
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
</android.support.v4.widget.SwipeRefreshLayout>
和代码
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_fragment_two, container, false);
swiperefresh = (SwipeRefreshLayout) view.findViewById(R.id.swiperefresh);
swiperefresh.setColorScheme(R.color.colorPrimary, R.color.colorAccent, R.color.colorPrimaryDark, R.color.colorPrimary);
swiperefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
swiperefresh.setRefreshing(true);
Log.d("Swipe", "Refreshing Number");
// Get data from WebAPI or database cache
}
});
return view;
}
此库允许您在上拉和下拉之间进行选择:
https://github.com/chrisbanes/Android-PullToRefresh
上拉刷新
默认情况下,此库设置为下拉刷新,但如果您想允许下拉刷新,则可以这样做。您甚至可以使用 'both' 设置将视图设置为同时启用上拉和下拉。有关如何设置的详细信息,请参阅自定义页面。
我认为 SwipeRefreshLayout 不允许这样做。
好吧...终于我在这里找到了解决方案Scroll up does not work with SwipeRefreshLayout in Listview
所以我的布局不会改变,但代码是。
我们要做以下事情
像public一样实施AbsListView.OnScrollListener
class FragmentTwo extends ListFragment implements SearchView.OnQueryTextListener, AbsListView.OnScrollListener
添加已实现接口的两个方法AbsListView.OnScrollListener
喜欢这里
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
swiperefresh.setEnabled(firstVisibleItem == 0);
}
这里的关键是
swiperefresh.setEnabled(firstVisibleItem == 0);
implements OnScrollListener inside listFragment
我已经实现了 SwipeRefreshLayout
并且基本上可以正常工作。 https://developer.android.com/training/swipe/add-swipe-interface.html
我遇到了一个奇怪的问题,当您转到列表底部时,当您尝试滚动到顶部时,SwipeRefreshLayout
会刷新。
那不是我需要的。我只需要滚动到列表的顶部而不刷新 ListView。
我的意思是,根据我们的立场,何时刷新应该是某种条件。正确的?因为当我们在 ListView 的顶部时,预期的行为是允许刷新。
请帮忙。
<android.support.v4.widget.SwipeRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/swiperefresh"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity"
android:orientation="vertical"
>
<SearchView
android:id="@+id/editSearch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:iconifiedByDefault="false"
android:queryHint="Input the number"
/>
<ListView
android:paddingTop="5dp"
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
</android.support.v4.widget.SwipeRefreshLayout>
和代码
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_fragment_two, container, false);
swiperefresh = (SwipeRefreshLayout) view.findViewById(R.id.swiperefresh);
swiperefresh.setColorScheme(R.color.colorPrimary, R.color.colorAccent, R.color.colorPrimaryDark, R.color.colorPrimary);
swiperefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
swiperefresh.setRefreshing(true);
Log.d("Swipe", "Refreshing Number");
// Get data from WebAPI or database cache
}
});
return view;
}
此库允许您在上拉和下拉之间进行选择:
https://github.com/chrisbanes/Android-PullToRefresh
上拉刷新 默认情况下,此库设置为下拉刷新,但如果您想允许下拉刷新,则可以这样做。您甚至可以使用 'both' 设置将视图设置为同时启用上拉和下拉。有关如何设置的详细信息,请参阅自定义页面。
我认为 SwipeRefreshLayout 不允许这样做。
好吧...终于我在这里找到了解决方案Scroll up does not work with SwipeRefreshLayout in Listview
所以我的布局不会改变,但代码是。
我们要做以下事情
像public一样实施
AbsListView.OnScrollListener
class FragmentTwo extends ListFragment implements SearchView.OnQueryTextListener, AbsListView.OnScrollListener
添加已实现接口的两个方法
AbsListView.OnScrollListener
喜欢这里
@Override public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { swiperefresh.setEnabled(firstVisibleItem == 0); }
这里的关键是
swiperefresh.setEnabled(firstVisibleItem == 0);
implements OnScrollListener inside listFragment