2012-08-12 100 views
0

我已经有片段ActionBar Tabbistener附加到每个选项卡。在我的主要活动我删除标签按钮如下:运行代码在ActionBar选项卡片段时删除选项卡

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle item selection 
    switch (item.getItemId() 
     case R.id.closeTab: 
      closeTab(); 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 

public void closeTab() { 
    if(getActionBar().getTabCount() > 1) { 
      Tab tab = getActionBar().getSelectedTab(); 
      getActionBar().removeTab(tab); 
    } 
} 

我试图做到的是在我的标签片段运行一些代码,它就会被删除之前。我可以将它放在片段onDestroyView()onDestroy()中,但是当我按下我的删除选项卡按钮时,我只想运行此代码。 我检查了TabListener的文档,但它似乎像TabListener只监听选择变化。 我TabListener:

public TabListener(Activity a, String t, Class<T> c) { 
    activity = a; 
    tag = t; 
    myClass = c; 
} 

/* The following are each of the ActionBar.TabListener callbacks */ 
public void onTabSelected(Tab tab, FragmentTransaction ft) { 
    // Check if the fragment is already initialized 
    if (fragment == null) { 
     // If not, instantiate and add it to the activity 
     fragment = Fragment.instantiate(activity, myClass.getName());   
     ft.add(android.R.id.content, fragment, tag); 

    } else { 
     // If it exists, simply attach it in order to show it 
     ft.attach(fragment); 
    } 
} 

public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
    if (fragment != null) { 
     // Detach the fragment, because another one is being attached 
     ft.detach(fragment); 
    } 
} 

public void onTabReselected(Tab tab, FragmentTransaction ft) { 
} 

为了澄清我的问题:我怎么可以运行在我的代码片段之前的标签被删除?

回答

0

Okey,看完这篇文章后我想出来了:link。 在我的片段,我把setHasOptionMenu(true)

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    setHasOptionsMenu(true); 
} 

然后我可以在我的片段添加onOptionsItemSelected

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
// Handle item selection 
switch (item.getItemId()) { 
    case R.id.closeTab: 
     closeTab();     
     return true; 
    default: 
     return super.onOptionsItemSelected(item); 
    } 
} 

public void closeTab() { 
    ActionBar actionBar = getActivity().getActionBar(); 
    if(actionBar.getTabCount() > 1) { 
      Tab tab = actionBar.getSelectedTab(); 
      actionBar.removeTab(tab); 
      Log.d(TAG, "CLOSED TAB"); 
    } 
}