删除选项卡时在 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 选项卡片段中运行代码的主要内容,如果未能解决你的问题,请参考以下文章