2012-07-22 111 views
0

我正在使用片段類。 我添加它使用片段的深層副本

FragmentTransaction fragmentTransaction =  fragmentManager.beginTransaction(); 


     Search fragment = new Search(maincontrolActivity.this); 

      fragmentTransaction.add(R.id.mainLayout,fragment , "MY_FRAG"); 
      fragmentTransaction.commit(); 
      this.FragmentObject = fragment 

當我刷新了控制,我記得這個代碼,但通過傳遞this.FragmentObject但我認爲這是收集,因爲=參考,相同的對象,並說什麼時候添加垃圾,它免費舊的fragement這是相同的

所以我需要一個深層複製或任何方式刷新?

任何想法

+0

我說你被不正確地接近問題。爲什麼不在你的片段中使用'refreshData'方法來刷新其'View'並重新填充數據?而不是重新創建引起大量開銷的整個片段... – 2012-07-22 19:08:47

+0

@SalilPandit可以給我例子 – AMH 2012-07-22 19:13:58

+0

問題是我有很多片段,你的意思是在每個片段中,我把我的datarefresher方法或類似的東西 – AMH 2012-07-22 19:21:01

回答

1

好的。所以我要做的就是定義一個Interface,每個Fragment寄存器和Activity用於回調點擊刷新按鈕。然後在片段本身中刷新它的數據。如果這意味着要獲取新數據,請切換到ProgressBar,從服務器獲取數據,然後重新填充ViewHere is an entire articleActivities中創建Interface s並從它們調用Fragment。 這裏是你的代碼看起來大概是什麼樣子...... 的Activity

public class RefreshActivity extends Activity implements View.OnClickListener { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     findViewById(R.id.refresh_button).setOnClickListener(this); 
    } 

    public interface OnRefreshPressedListener { 
     public void onRefreshPressed(); 
    } 

    @Override 
    public void onClick(View v) { 
     ((OnRefreshPressedListener)this.FragmentObject).onRefreshPressed(); 
    } 
} 

Fragment

public class Search extends Fragment implements OnRefreshPressedListener { 

    @Override 
    public void onRefreshPressed() { 
     //TODO: Refresh your data! 

    } 

}