2017-04-06 91 views
0

美好的一天,如何删除片段时,点击项目再次

我面临着一些问题与碎片

我展示一个片段时,在“更多”用户点击,作为一个弹出菜单

enter image description here

但是当我点击“更多”再次,它会像对前一个

SOM可以增加一个片段当我再次点击“更多”时告诉我如何删除片段?谢谢!

enter image description here

底部的导航菜单

public class MainActivity extends AppCompatActivity { 

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

    BottomNavigationView bottomNavigationView = (BottomNavigationView) 
      findViewById(R.id.bottom_navigation); 
    BottomNavigationViewHelper.disableShiftMode(bottomNavigationView); 

    bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { 
     @Override 
     public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
      Fragment fragment = null; 
      String title = ""; 
      switch (item.getItemId()) { 
       case R.id.menu: 
        getFragmentManager().beginTransaction().replace(R.id.fragment_container, new MenuFragment()).addToBackStack(null).commit(); 
        title = "MENU"; 
        getSupportActionBar().setTitle(title); 
        break; 
       case R.id.promotion: 
        getFragmentManager().beginTransaction().replace(R.id.fragment_container, new PromotionFragment()).addToBackStack(null).commit(); 
        title = "PROMOTION"; 
        getSupportActionBar().setTitle(title); 
        break; 
       case R.id.order: 
        getFragmentManager().beginTransaction().replace(R.id.fragment_container, new OrderFragment()).addToBackStack(null).commit(); 
        title = "ORDER"; 
        getSupportActionBar().setTitle(title); 
        break; 
       case R.id.location: 
        getFragmentManager().beginTransaction().replace(R.id.fragment_container, new LocationFragment()).addToBackStack(null).commit(); 
        title = "LOCATION"; 
        getSupportActionBar().setTitle(title); 
        break; 
       case R.id.more: 
        getFragmentManager().beginTransaction().add(R.id.fragment_container, new MoreFragment()).addToBackStack(null).commit(); 

        break; 
      } 
      return true; 
     }}); 

} 

} 
+0

添加您的代码和XML文件中的代码。 –

+0

这将有助于很多,如果你添加一些代码... –

+0

添加你的代码如何添加这个片段更多的按钮点击 – 9spl

回答

0

的Java代码,而过渡到一个新的,不要你的弹出Fragment添加到backstack。这是你应该做的第一步。

接下来,您应该关闭它,而不是在第二次“更多”点击时重新打开弹出窗口。听起来像一个更好的方法。但是,这可能会更好地实现使用Dialogs.

0

要做到这一点,你必须跟踪片段状态。让我们假设一个变量isFragmentOpen。在onClick中,您必须翻转变量并做出决定。

private boolean isFragmentOpen; 

void onClick(View view) { 

    if (!isFragmentOpen) { 
     addFragment(); 
    } else { 
     removeFragment(); 
    } 
    // Flip the fragment state. 
    isFragmentOpen = !isFragmentOpen; 

} 

请查看如何从官方文件Fragments

0

的“更多”添加具有addToBackStack功能的标签(例如:moreFragment)调用事务之前添加或删除片段。检查片段经理和删除片段,如:

Fragment mFragment =getSupportFragmentManager().findFragmentByTag("moreFragment"); 
if(mFragment != null) 
    getSupportFragmentManager().beginTransaction().remove(mFragment); 

但我认为不是删除旧片段只是保持它,如果不是不开放新的空

0

感谢帮助,现在我已经解决了这个问题^^

这是我使用的是什么

FragmentManager fm = getFragmentManager(); 
        FragmentTransaction ft = fm.beginTransaction(); 
        MoreFragment f = (MoreFragment) fm.findFragmentByTag("tag"); 

        if(f == null) { // not added 
         f = new MoreFragment(); 
         ft.add(R.id.fragment_container, f, "tag"); 
         ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 

        } else { // already added 

         ft.remove(f); 
         ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE); 
        } 
        ft.commit(); 
        break; 
相关问题