5

すべての新しいActionBarおよびFragmentsAPIのハンドルを取得しようとしています。メインアクティビティがあり、2つの異なるタブを管理する必要があります。ICSより古いバージョンをサポートするためにActionBarSherlockを使用しています。

各タブには独自のタブが含まれていますFragment(それぞれがのサブクラスですSherlockListFragment)基本的にうまく機能するようになりましたが、それが愚かであると確信しているという問題がありますが、まだ理解できません:

各フラグメントが最初に表示されるときは、すべてがOKであり、リストにデータが入力されているため、アクションバーのMenuItemsが表示されます。

ただし、2回目にタブが表示されたとき(スウィッチとスイッチバックの後)、リストもActionBarMenuItemsも入力されません。

これが私がタブを切り替える方法です:

@Override
public void onTabSelected(Tab tab, FragmentTransaction transaction) {
    SherlockListFragment toAttach = // Find the right fragment here...

    if (toAttach != null) {
        if (toAttach.isAdded() == false) {
            transaction.add(R.id.tab_placeholder, toAttach,
                    REMINDER_FRAGMENT_TAG);
        } else {
            transaction.attach(toAttach);
        }
    }
}

そしてonTabUneselect私はフラグメントを切り離しています:

@Override
public void onTabUnselected(Tab tab, FragmentTransaction transaction) {
    SherlockListFragment toDetach = // Find the right fragment
    if (toDetach != null) {
        transaction.detach(toDetach);
    }
}

onResumeにリストとActionBarメニューを入力しています。

@Override
public void onResume() {
    super.onResume();
    setHasOptionsMenu(true);
    fillRemindersList();
}

onStartとonCreateViewでも試してみましたが、役に立ちませんでした...

だから私はここで何が欠けていますか?そして、私のコードに私が気付いていない他の問題がある場合は、教えてください。

ありがとう!

編集:

タブを切り替えた後、呼び出されないことを確認しonResumeました。これは、タブを取り外して再度取り付けるため、明らかに間違っています...タブを間違った方法で切り替えていますか?

4

2 に答える 2

2

onTabUnselected で transaction.remove(fragment) を、onTabSelected で transaction.replace を使用してみてください。

于 2012-05-04T00:25:51.103 に答える
0

このコードの外で beginTransaction() と commit() を実行していると思いますか、それとも忘れましたか? ここで使用されているトリックもサンプルから確認できます: https://github.com/JakeWharton/ActionBarSherlock/blob/master/samples/fragments/src/com/actionbarsherlock/sample/fragments/FragmentTabs.java

于 2012-04-24T21:45:49.810 に答える