Android SwipeRefreshLayout,带垂直视图寻呼机,仅刷新最上面的片段
我尝试在代码中实现Android SwipeRefreshLayout,带垂直视图寻呼机,仅刷新最上面的片段,android,android-fragments,android-viewpager,vertical-scrolling,swiperefreshlayout,Android,Android Fragments,Android Viewpager,Vertical Scrolling,Swiperefreshlayout,我尝试在代码中实现swiperefreshlayout,但它会不断刷新整个寻呼机,而不是在第一个Fragment即第0个Fragment时进行刷新。 我尝试将refresh设置为false,如图所示,但加载程序仍然出现,并且在再次返回第0个片段时不会重置。 在设置swiperefreshlayout.enable(false)时,我无法在任何地方刷新它。 有人能提出一个替代方案吗? 这是我的XML文件: <?xml version="1.0" encoding="utf-8"?> &
swiperefreshlayout
,但它会不断刷新整个寻呼机,而不是在第一个Fragment
即第0个Fragment
时进行刷新。
我尝试将refresh设置为false,如图所示,但加载程序仍然出现,并且在再次返回第0个片段时不会重置。
在设置swiperefreshlayout.enable(false)
时,我无法在任何地方刷新它。
有人能提出一个替代方案吗?
这是我的XML
文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/parentLinearLayout"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/swipe_refresh_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fillViewport="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<lbbdapp.littleblackbook.com.littleblackbook.Support.VerticalViewPager
android:id="@+id/verticalViewPager"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</ScrollView>
</android.support.v4.widget.SwipeRefreshLayout>
</LinearLayout>
不要在ViewGroup上扩展SwipeRefesh,而是在ViewPager的每个片段中使用它。 解决此问题后,现在需要检查ViewPager和SwiperFresh的向下滚动手势
public class NEWSwipeRefresh extends SwipeRefreshLayout {
private View mTargetView;
public NEWSwipeRefresh(Context context) {
this(context, null);
}
public NEWSwipeRefresh(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setTarget(View view) {
mTargetView = view;
}
@Override
public boolean canChildScrollUp() {
if (mTargetView instanceof YOURVIEW) {
final StaggeredGridView absListView = (YOURVIEW)mTargetView;
return absListView.getChildCount() > 0
&& (absListView.getFirstVisiblePosition() > 0 || absListView
.getChildAt(0).getTop() < absListView
.getPaddingTop());
} else {
return super.canChildScrollUp();
}
}
}
公共类NewsweepRefresh扩展SwipeRefreshLayout{
私有视图;
公共新闻刷新(上下文){
这个(上下文,空);
}
公共新闻刷新(上下文、属性集属性){
超级(上下文,attrs);
}
公共void setTarget(视图){
mTargetView=视图;
}
@凌驾
公共布尔值canChildScrollUp(){
if(视图的mTargetView实例){
最终视图absListView=(YOURVIEW)mTargetView;
返回absListView.getChildCount()>0
&&(absListView.getFirstVisiblePosition()>0 | | absListView
.getChildAt(0).getTop()
正常情况下,滑动刷新返回-1,并向其父项提供滑动手势。现在,我已在这里为listview/gridview覆盖了它,以便它可以检查可见项,如果它位于顶部,则它将滑动到父对象,否则它将滑动到子对象。不要将滑动范围扩展到ViewGroup上,而是在ViewPager的每个片段中使用它。 解决此问题后,现在需要检查ViewPager和SwiperFresh的向下滚动手势
public class NEWSwipeRefresh extends SwipeRefreshLayout {
private View mTargetView;
public NEWSwipeRefresh(Context context) {
this(context, null);
}
public NEWSwipeRefresh(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setTarget(View view) {
mTargetView = view;
}
@Override
public boolean canChildScrollUp() {
if (mTargetView instanceof YOURVIEW) {
final StaggeredGridView absListView = (YOURVIEW)mTargetView;
return absListView.getChildCount() > 0
&& (absListView.getFirstVisiblePosition() > 0 || absListView
.getChildAt(0).getTop() < absListView
.getPaddingTop());
} else {
return super.canChildScrollUp();
}
}
}
公共类NewsweepRefresh扩展SwipeRefreshLayout{
私有视图;
公共新闻刷新(上下文){
这个(上下文,空);
}
公共新闻刷新(上下文、属性集属性){
超级(上下文,attrs);
}
公共void setTarget(视图){
mTargetView=视图;
}
@凌驾
公共布尔值canChildScrollUp(){
if(视图的mTargetView实例){
最终视图absListView=(YOURVIEW)mTargetView;
返回absListView.getChildCount()>0
&&(absListView.getFirstVisiblePosition()>0 | | absListView
.getChildAt(0).getTop()
通常,滑动刷新返回-1,它会给它的父对象滑动手势。现在我在这里为listview/gridview覆盖了它,这样它就可以检查可见的项目,如果它在上面,它会给父对象滑动,否则它会给子对象滑动。好吧,几天以来我一直在尝试解决这个问题,这很简单。只需将
swiperFreshLayout
作为ViewPager
的父元素,并使用OnPageChangeListener
在特定片段上禁用swiperFreshLayout
,如下所示:
// viewpager change listener
OnPageChangeListener viewPagerPageChangeListener = new OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
//for the 0th pos disable SwipeRefreshLayout;
if(position != 0){
swipeRefreshLayout.setEnabled(false);
}else swipeRefreshLayout.setEnabled(true);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}};
好吧,几天以来我一直在想这个问题,很简单。只需将
swiperFreshLayout
作为ViewPager
的父元素,并使用OnPageChangeListener
在特定片段上禁用swiperFreshLayout
,如下所示:
// viewpager change listener
OnPageChangeListener viewPagerPageChangeListener = new OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
//for the 0th pos disable SwipeRefreshLayout;
if(position != 0){
swipeRefreshLayout.setEnabled(false);
}else swipeRefreshLayout.setEnabled(true);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}};
你能给我一个样品吗?我如何只检查一次特定的刷卡?我的活动也允许正常滑动。如何检测垂直视图寻呼机的垂直向下滑动?@SimranBakshi我写了一个将SwiperFresh与listview/gridview一起使用的示例。你能给我一个示例吗?我如何只检查一次特定的刷卡?我的活动也允许正常滑动。如何检测垂直视图寻呼机的垂直向下滑动?@SimranBakshi我写了一个将SwiperFresh与listview/gridview结合使用的示例。