我有一個頗受歡迎的場景,其中有一個包含進度條和ListView的片段。我想在使用Retrofit獲取數據後填充ListView。現在,一旦響應回來,進度條需要隱形。當URL抓取完成時禁用進度條:標準場景
將onCreateView()
中擴充的片段佈局視圖存儲爲成員變量並使用該變量禁用進度是否是個好主意在onResponse()
(回調創建於onCreate()
)中,當提取成功?
片段佈局:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/source_items_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="5dp">
<com.gc.materialdesign.views.ProgressBarCircularIndeterminate
android:id="@+id/progress_bar"
android:layout_width="32dp"
android:layout_height="32dp"
android:background="#1E88E5"
android:layout_gravity="center_horizontal"/>
<ListView android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/source_list"/>
</FrameLayout>
的onCreate():
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mItemList = new ArrayList<SourceItem>();
RestClient.get().getSources().enqueue(new Callback<SourceItemList>() {
@Override
public void onResponse(Response<SourceItemList> response, Retrofit retrofit) {
if (response.isSuccess()) {
disableProgressBar();
//...
}
}
@Override
public void onFailure(Throwable t) {
disableProgressBar();
return;
}
private void disableProgressBar() {
if (mView != null) {
mView.findViewById(R.id.progress_bar).setVisibility(View.INVISIBLE);
}
}
});
// ...
}
onCreateView():
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup viewGroup, Bundle savedInstanceState) {
mView = inflater.inflate(R.layout.fragment_sourceitem_list, viewGroup, false);
// ...
return mView;
}
感謝
我建議,而不是保持視圖只是使進度條作爲成員變量,初始化它onViewCreated的片段,並做任何你想做的進度欄變量。 – dex
我明白了。但是怎麼來?爲了保持對視圖的引用,是否需要更多的內存?它不應該相當輕? – Kar
實際上是在內存方面:是的,現在它幾乎相同,但可以說你的xml中有一些新的組件,然後它是內存密集型的,一旦觸發了片段的onDestroyView,gc就會調用,這可能會導致操作系統殺死你的應用程序由於記憶教會,當它是背景。 – dex