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 回答