0
TLDR:爲片段添加菜單項會導致onTabSelected被無限調用。Android中的選項卡和片段菜單是否兼容?
我在使用Android 4.0+的應用程序,並且遇到問題。我目前使用帶有製表符的ActionBar
,效果很好。當我點擊一個標籤時,方法onTabSelected(Tab, FragmentTransaction)
被調用一次,並且我切換屏幕上顯示的片段。下面是方法:
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
onTabSelected(tab, ft);
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
FragmentManager fragmentManager = getFragmentManager();
switch(tab.getPosition()) {
case 0 :
fragmentManager.beginTransaction()
.replace(R.id.buttons_box, ButtonsFragment.newInstance(0))
.commit();
fragmentManager.beginTransaction()
.replace(R.id.container, ControlsFragment.newInstance(0))
.commit();
break;
case 1 :
...
case 2 :
...
}
}
的問題出現時,我想添加菜單項的片段。在ControlsFragment
,我添加了以下方法:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
{
inflater.inflate(R.menu.controls, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch(item.getItemId())
{
case R.id.control_1 :
Toast.makeText(getActivity(), "Clicked Control 1", Toast.LENGTH_SHORT).show();
return true;
default :
return super.onOptionsItemSelected(item);
}
}
,並將此行onCreate(Bundle)
:只有現在
setHasOptionsMenu(true);
,運行應用程序時,第一個選項卡被默認選中,而方法onTabSelected
在我的活動中被反覆調用。爲什麼會發生?選項卡和片段菜單項不兼容?
編輯
我試圖從onTabReselected
刪除調用onTabSelected
,但這並沒有解決問題。
他們不應該是不相容的。您使用的是什麼操作欄(原生API Level 11?AppCompat?ActionBarSherlock?)和片段(原生API Level 11?Android支持backport?)的實現?順便說一句,有沒有理由使用兩個'FragmentTransactions'而不是一個? – CommonsWare
@CommonsWare我正在使用原生一切 - API 14+。至於兩個'FragmentTransactions' - 我還沒有使用'Fragment's,並且不完全熟悉它的工作原理。你會建議在第二個事務中添加'replace'行到第一個事務嗎? 「 – Phil
」您會建議只將第二筆交易中的替換行添加到第一筆交易中嗎?「 - 這會更有效率。可以想象,它甚至可以幫助解決您的問題,儘管這會讓我感到驚訝。再次,問題本身讓我感到驚訝。 – CommonsWare