2015-10-19 49 views
2

我有一個頗受歡迎的場景,其中有一個包含進度條和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; 
} 

感謝

+0

我建議,而不是保持視圖只是使進度條作爲成員變量,初始化它onViewCreated的片段,並做任何你想做的進度欄變量。 – dex

+0

我明白了。但是怎麼來?爲了保持對視圖的引用,是否需要更多的內存?它不應該相當輕? – Kar

+0

實際上是在內存方面:是的,現在它幾乎相同,但可以說你的xml中有一些新的組件,然後它是內存密集型的,一旦觸發了片段的onDestroyView,gc就會調用,這可能會導致操作系統殺死你的應用程序由於記憶教會,當它是背景。 – dex

回答

1

最好是有進度條初始化onCreateView()rath呃比使用view.findViewById(),因爲它是一個昂貴的操作。

+1

findViewById並不是所有昂貴的操作。它的一個由R.java和android生成的id保持一個散列,那裏有1對1的映射,所以理想的是它的O(1)操作。 – dex

+0

@dex我認爲它遍歷視圖層次結構,直到找到匹配的id。這就是每次需要對視圖進行引用都不好的主意。最好有一個局部變量並在需要時使用它。 –

+0

你的意思是android store以樹的形式存在視圖可能是平衡的並且使用bfs或dfs來遍歷?如果可能,請分享相關鏈接。非常感謝您的澄清。 – dex