2017-09-09 105 views
0

在我的主要活動,我有這條線viewgroupAndroid上的重複片段交易

MainActivity更換片段:

public class ActivityMain extends AppCompatActivity { 
    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     getSupportFragmentManager().beginTransaction() 
       .replace(R.id.activity_main_container, new HomeFragment()) 
       .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) 
       .addToBackStack(null) 
       .commit(); 
    } 
} 

活動佈局:

<android.support.design.widget.CoordinatorLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <FrameLayout 
     android:id="@+id/activity_main_container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:clickable="true" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"/> 

</android.support.design.widget.CoordinatorLayout> 

和我HomeFragment是:

public class HomeFragment extends Fragment { 

    public HomeFragment() { 

    } 

    @Override 
    public void onCreate(Bundle saved) { 
     super.onCreate(saved); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_test, container, false); 
     Log.e("HomeFragment", " onCreateView"); 
     return view; 
    } 
} 

現在生成應用程序並在仿真器上運行後,我的代碼運行重複HomeFragment,我該如何防止此操作?

+0

你在哪裏調用'updateHomeFragments()'而來,什麼是周圍的代碼? –

+0

@BenP。從MainActivity的onCreate –

+0

你是否每次調用'onCreate()'運行? –

回答

1

當活動恢復時(如配置更改後),框架將恢復您的片段狀態。您應該只在第一次創建活動時操作片段。

@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    if(savedInstanceState == null) { 
     // set up your fragments 
    } 
} 
0

做這樣如果片段已經啓動不進行交易 再次

private Class mFragmentClass; mFragmentClass = InfoFragment.class; 
if (null != mFragmentClass) { 
try { 
mFragment = (Fragment) mFragmentClass.newInstance(); 
if(mFragment instanceof (Fragment)mFragmentClass){ 
FragmentManager fragmentManager = getSupportFragmentManager(); fragmentManager.beginTransaction().replace(R.id.content_navigation_menu, mFragment).commit(); 
} catch (InstantiationException exception) { exception.printStackTrace(); 
} catch (IllegalAccessException exception) { exception.printStackTrace(); } 
}else { 
//do nothing 
}