タブ ナビゲーションとアクション モードを使用すると、ActionBarSherlock に奇妙な問題が発生します。
問題を繰り返すのは非常に簡単です。デモ コードを使用して、次のサンプル アクティビティを生成します。
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.app.ActionBar.Tab;
import com.actionbarsherlock.view.ActionMode;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import android.os.Bundle;
import android.support.v4.app.FragmentTransaction;
public class MainActivity extends SherlockFragmentActivity implements ActionBar.TabListener {
private ActionMode actionMode = null;
@Override
public void onCreate(Bundle savedInstanceState) {
setTheme(com.actionbarsherlock.R.style.Theme_Sherlock);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
for (int i = 1; i <= 2; i++) {
ActionBar.Tab tab = getSupportActionBar().newTab();
tab.setText("Tab " + i);
tab.setTabListener(this);
getSupportActionBar().addTab(tab);
}
actionMode = startActionMode(new TestActionMode());
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
private final class TestActionMode implements ActionMode.Callback {
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
menu.add("Add").setIcon(android.R.drawable.ic_input_add).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
menu.add("Search").setIcon(android.R.drawable.ic_search_category_default).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
// TODO Auto-generated method stub
}
}
}
Android 4.0 (実際のデバイスとエミュレーターでテスト済み) では正しく動作しますが、Jelly Bean (エミュレーターでのみテスト済み) では次のような動作をします。
- アプリケーションを起動 (ポートレート モード) すると、正しく動作します。
- アプリケーションをローテーションすると正しく動作します。
- アプリケーションを再度回転すると、タブ ナビゲーションと ActionMode が重なっています ( http://i.stack.imgur.com/Zf1VG.png )。
場合によっては (まれに)、すべてが完全に機能することがあります。特に、Dev ですべてのアニメーションを有効にしている場合はそうです。設定(通常、すべてのアニメーションを無効にします)。
私は ActionBarSherlock 4.4 を使用しています。
どこで間違いを犯したのか本当にわからないので、どんな提案でも大歓迎です。
ありがとうございます。