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 레벨 11 AppCompat ActionBarSherlock)와 프래그먼트 (네이티브 API 레벨 11 안드로이드 지원 백 포트)의 구현은 무엇을 사용하고 있습니까? BTW, 거기에 하나의 대신에 두 개의'FragmentTransactions'을 사용하는 이유가 있습니까? – CommonsWare
@CommonsWare 나는 네이티브 모든 것을 사용하고 있습니다 - API 14+. 두 개의 'FragmentTransactions'에 관해서는 - 나는'Fragment'를 많이 사용하지 않았으며, 어떻게 작동하는지 잘 모르고 있습니다. 두 번째 트랜잭션의 첫 번째 트랜잭션에'replace' 라인을 추가하는 것이 좋을까요? – Phil
"두 번째 트랜잭션의 행을 첫 번째 트랜잭션으로 바꾸기 만하면됩니까?" - 조금 더 효율적입니다. 그것이 당신의 문제에 도움이 될지도 모르겠지만, 그것은 저를 놀라게 할 것입니다. 그런 다음 문제 자체가 나를 놀라게합니다. – CommonsWare