Open tianci opened 8 years ago
@Override public void onFinishInflate() { super.onFinishInflate(); if (getChildCount() != 2) { throw new RuntimeException(BGARefreshLayout.class.getSimpleName() + "必须有且只有一个子控件"); } mContentView = getChildAt(1); if (mContentView instanceof AbsListView) { mAbsListView = (AbsListView) mContentView; } else if (mContentView instanceof RecyclerView) { mRecyclerView = (RecyclerView) mContentView; } else if (mContentView instanceof ScrollView) { mScrollView = (ScrollView) mContentView; } else if (mContentView instanceof WebView) { mWebView = (WebView) mContentView; } else if (mContentView instanceof BGAStickyNavLayout) { mStickyNavLayout = (BGAStickyNavLayout) mContentView; mStickyNavLayout.setRefreshLayout(this); } else { mNormalView = mContentView; // 设置为可点击,否则在空白区域无法拖动 mNormalView.setClickable(true); } }
我看到mContentView = getChildAt(1);,所以如果需要在数据加载出错的时候切换另一个视图,这个视图也支持下拉刷新的话,就没法使用如下布局了:
mContentView = getChildAt(1);
<cn.bingoogolapple.refreshlayout.BGARefreshLayout android:id="@+id/fragment_rotate_header_with_view_group_frame" android:layout_width="match_parent" android:layout_height="match_parent"> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:id="@+id/net_result" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:divider="@android:color/transparent" android:dividerHeight="0dp" android:gravity="center" android:scrollbars="none" tools:listitem="@layout/item_rtsp_models" /> <LinearLayout android:id="@+id/net_progress" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:orientation="vertical"> <ProgressBar style="?android:attr/progressBarStyle" android:layout_width="200dip" android:layout_height="wrap_content" android:indeterminate="true" android:indeterminateOnly="true" android:visibility="gone"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="数据正在加载中……" android:textColor="#000000" android:visibility="gone"/> </LinearLayout> <LinearLayout android:id="@+id/net_no_result" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:background="@android:color/transparent" android:orientation="vertical"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:background="@android:color/transparent" android:src="@mipmap/no_live" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginTop="@dimen/height_720_1280_40" android:text="没有数据" android:textColor="#000000"/> </LinearLayout> </FrameLayout> </cn.bingoogolapple.refreshlayout.BGARefreshLayout>
而必须写成:
<FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"> <cn.bingoogolapple.refreshlayout.BGARefreshLayout android:id="@+id/fragment_rotate_header_with_view_group_frame" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:id="@+id/net_result" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:divider="@android:color/transparent" android:dividerHeight="0dp" android:gravity="center" android:scrollbars="none" tools:listitem="@layout/item_rtsp_models" /> </cn.bingoogolapple.refreshlayout.BGARefreshLayout> <LinearLayout android:id="@+id/net_progress" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:orientation="vertical"> <ProgressBar style="?android:attr/progressBarStyle" android:layout_width="200dip" android:layout_height="wrap_content" android:indeterminate="true" android:indeterminateOnly="true" android:visibility="gone"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="数据正在加载中……" android:textColor="#000000" android:visibility="gone"/> </LinearLayout> <LinearLayout android:id="@+id/net_no_result" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:background="@android:color/transparent" android:orientation="vertical"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:background="@android:color/transparent" android:src="@mipmap/no_live" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginTop="@dimen/height_720_1280_40" android:text="没有数据" android:textColor="#000000"/> </LinearLayout> </FrameLayout>
而这会导致一个问题,就是切换到没有数据页面的时候,没有下拉更新的效果了。 所以可以改成手动指定mContentView吗?
@tianci 其实这个之前有想过,只是还没加上去
我看到
mContentView = getChildAt(1);
,所以如果需要在数据加载出错的时候切换另一个视图,这个视图也支持下拉刷新的话,就没法使用如下布局了:而必须写成:
而这会导致一个问题,就是切换到没有数据页面的时候,没有下拉更新的效果了。 所以可以改成手动指定mContentView吗?