问题:从子活动导航回来时片段没有更新?

时间:2013-11-07 03:35:28

标签: android

我在操作栏中有3个标签,每个标签都与一个片段相关联。每个片段都有一个ListView,它绑定到SimpleCursorAdapter。单击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_;
}

如果您需要更多代码,请告诉我。

1 个答案:

答案 0 :(得分: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());
    }