2013-10-04 31 views
0

如果我想重用我ArrayAdapter裏面的片段,是效率低下?用我ArrayAdapter內片段

也就是說,在我的ArrayAdapter,我getView()應該是這樣的:

public View getView(final int position, View convertView, ViewGroup parent) { 
     UserFragment userFragment = new UserFragment(); 
     return userFragment.getView(); 
} 

我問,因爲通常在getView()方法,它看起來是這樣的:

public View getView(final int position, View convertView, ViewGroup parent) { 
     View view = convertView; 
     if (view == null) { 
      LayoutInflater inflater = (LayoutInflater) getContext() 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      view = inflater.inflate(R.layout.user, null); 
      ...//do stuff 
     } 

是它每次調用getView()時都無法創建Fragment?

回答

2

首先,Fragment都有自己的生命週期,像ActivityonCreateonDestory
所以,如果你在做getView()UserFragment userFragment = new UserFragment(),每次滾動ListView,有很多不同的Fragment的的情況下將創建和移出的將是GC。這花費了很多。

其次,你不重用的意見。每個Fragment的實例都有自己的看法結構,使userFragment.getView()將返回新的每次View一個品牌。

基本上,它是不推薦使用FragmentListView。使用convertView更有效。

1

A FragmentFragmentManager(通過FragmentTransactions)管理,由Activity擁有。或者你可以在片段中有碎片。

A ListView分別管理自己的看法,也回收這些意見,所以當你滾動時,你會得到convertView你應該使用的看法。底線是:片段只存在於活動或其他片段中,而Views(ListViewView的後代)留在片段或活動中。

所以:Is it inefficient to create a Fragment each time the getView() is called?。我看不出爲什麼你應該這樣做。實際上,製作push-ups而不是在視圖中使用片段將會有1000倍的幫助。沒有一篇很好的技術文章,有人討論這些文章。