0

アクションバーに 3 つのタブがあり、各タブはフラグメントに関連付けられています。各フラグメントには、SimpleCursorAdapter にバインドされる ListView があります。ListView アイテムをクリックすると、詳細アクティビティに移動し、戻るための戻るボタンがあります。詳細アクティビティで項目を削除すると、ListView が更新されることを期待しています。

問題は次のとおりです (3 つのタブが A、B、C であると仮定します):

1) A から項目を選択して詳細ページに移動し、この項目を削除してから A に戻ると、タブ A の ListView が更新されます。これは私が期待することです。

2)しかし、タブAを選択し、Bを選択し、もう一度Aを選択してから、1)の手順を繰り返すと、ListViewは更新されません。

詳細アクティビティに戻るには、次のコードを使用します。

getFragmentManager().popBackStackImmediate();

私のTabListenerがあります:

public class TabListener<T extends Fragment> implements ActionBar.TabListener {
    public TabListener(Activity activity, String tag, Class<T> clz) {
        activity_ = activity;
        tag_ = tag;
        class_ = clz;
    }
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction transaction) {

        if (fragment_ == null) {
            fragment_ = Fragment.instantiate(activity_, class_.getName());
            transaction.add(android.R.id.content, fragment_, tag_);
        } else {
            transaction.add(android.R.id.content, fragment_, tag_);
        }
    }

    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction transaction) {
        if (fragment_ != null) {
            transaction.remove(fragment_);
        }
    }
    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction transaction) {
        // User selected the already selected tab. Usually do nothing.
    }

    private Fragment fragment_;
    private final Activity activity_;
    private final String tag_;
    private final Class<T> class_;
}

さらにコードが必要な場合は、教えてください。

4

1 に答える 1

0

解決しました。

TabListener を次のように変更します。

public class TabListener<T extends Fragment> implements ActionBar.TabListener {
    public TabListener(Activity activity, String tag, Class<T> clz) {
        activity_ = activity;
        tag_ = tag;
        class_ = clz;
    }
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction transaction) {
        if (fragment_ == null) {
            fragment_ = Fragment.instantiate(activity_, class_.getName());
            transaction.add(android.R.id.content, fragment_, tag_);
        } else {
//            transaction.add(android.R.id.content, fragment_, tag_);
            transaction.show(fragment_);
        }
    }

    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction transaction) {
        if (fragment_ != null) {
            transaction.hide(fragment_);
        }
    }
    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction transaction) {
        if (fragment_ != null) {
            transaction.hide(fragment_);
            transaction.show(fragment_);
        }
    }

    private Fragment fragment_;
    private final Activity activity_;
    private final String tag_;
    private final Class<T> class_;
}

Fragment クラスの onResume イベントで、タブを再度選択します。

public void onResume() {
        super.onResume();
        getActivity().getActionBar().setSelectedNavigationItem(getActivity().getActionBar().getSelectedNavigationIndex());
    }
于 2013-11-12T00:21:09.947 に答える