【问题标题】:Issue: fragment doesn't get updated when navigate back from sub-activity?问题:从子活动返回时片段没有更新?
【发布时间】:2013-11-07 03:35:27
【问题描述】:

我在操作栏中有 3 个选项卡,每个选项卡都与一个片段相关联。每个片段都有一个绑定到 SimpleCursorAdapter 的 ListView。单击 ListView 项目时,它会导航到详细信息活动,并且有一个返回按钮可以返回。我希望在删除详细活动中的项目时更新 ListView。

问题是(假设 3 个选项卡是 A、B、C):

1) 如果我从 A 中选择项目,然后转到详细信息页面,删除该项目,然后返回 A,选项卡 A 中的 ListView 得到更新,这就是我所期望的。

2)但是如果我选择tab 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_;
}

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

【问题讨论】:

    标签: android


    【解决方案1】:

    我解决了。

    将 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());
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-18
      相关资源
      最近更新 更多