删除选项卡时在 ActionBar 选项卡片段中运行代码

Posted

技术标签:

【中文标题】删除选项卡时在 ActionBar 选项卡片段中运行代码【英文标题】:Run code in ActionBar Tab Fragment when tab is removed 【发布时间】:2012-08-08 22:39:02 【问题描述】:

我有片段 ActionBar 选项卡,每个选项卡都附加了一个 TabListener。在我的主要活动中,我得到了一个删除选项卡按钮,如下所示:

@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 只监听 selectionchanges。 我的 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) 

澄清我的问题:如何在标签被删除之前在 Fragment 中运行代码?

【问题讨论】:

【参考方案1】:

好吧,我在阅读这篇文章后想通了: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");
    

【讨论】:

以上是关于删除选项卡时在 ActionBar 选项卡片段中运行代码的主要内容,如果未能解决你的问题,请参考以下文章

OnCreateView 多次调用/使用 ActionBar 和 Fragments

显示 ActionBar 选项卡的两个片段

带有片段的 ActionBar 选项卡旋转

切换到片段选项卡主机中的选项卡时查看寻呼机丢失其内容

ActionBar Sherlock ,操作栏选项卡和片段

单击选项卡时,我想显示两个片段