1

我有一个 ActionbarSherlock Activity 和 3 个 Actionbar 选项卡。第二个选项卡有两个片段(A 和 B)。具有列表日历的片段“A”和具有任务添加功能的片段“B”。当我单击片段“A”列表日历项目时,它将转到片段“B”。然后我在片段“B”中添加一些任务,然后按返回按钮以重定向片段“A”罚款。我的问题是当我从片段“B”返回片段“A”时调用哪个方法并且我更新任务返回片段“A”时的详细信息。谢谢...

动作栏活动类:

当我选择具有两个片段 ListCalendarFragment 和 TaskFragment 的第二个操作栏选项卡时。首先我添加两个片段。然后我隐藏 TaskFragment 并仅显示 ListCalendarFragmnet。

        TaskFragment()fragmentTask = new TaskFragment();
        ListCalendarFragment fragmentListCalendar = new ListCalendarFragment();
        fragmentrans = getSupportFragmentManager().beginTransaction();
        fragmentrans.add(R.id.content_frame, fragmentListCalendar);
        fragmentrans.add(R.id.content_frame, fragmentTask);
        fragmentrans.hide(fragmentTask);
        fragmentrans.commit();

当我单击列表日历项时,它将调用一个侦听器,该侦听器可用于显示任务片段以及隐藏列表日历片段。

SherlockFragmentActivity activity = getSherlockActivity();
                if (activity instanceof ListItemClickListener) {

                    ((ListItemClickListener)activity).onListClick();
                }

ListItemClickListener:接口

public interface ListItemClickListener {
public void onListClick();
}

ActionbarActivity 类实现 ListItemClickListener。此功能显示任务日历并隐藏列表日历。

@Override
public void onListClick() {

    fragmanager = getSupportFragmentManager();
    fragmentrans = fragmanager.beginTransaction();
    fragmentrans.hide(fragmentListCalendar);
    fragmentrans.show(fragmentTask);
    fragmentrans.addToBackStack(null);
    fragmentrans.commit();

}

我的问题是当我通过单击返回按钮返回列表日历时,调用了哪个生命周期方法或如何调用列表日历片段中的用户定义方法。因为我需要刷新列表日历片段中的列表日历适配器。谢谢

4

1 回答 1

0

我希望我能正确理解你的问题。这是我解决类似问题的方法:

像这样为 Fragment B 创建一个接口:

public interface FragmentBListener {
    public void onBackButtonPressed();
}

然后,在 Fragment B 中实例化它(在 onCreateView 上方实例化小部件等):

FragmentBListener mCallback;

然后,在您的 Fragment B 中,无论何时您想返回、取消或其他什么,您都可以调用:

mCallback.onBackButtonPressed();

当然,该接口是在您的主要活动(或您选择的任何活动)中实现的,因此应该有一个像这样的方法:

@Override
public void onBackButtonPressed() {
    Log.i(TAG, "onBackButtonPressed()");    

    // Do something, e.g. reload Fragment A
}

希望这可以帮助。

于 2013-11-15T07:22:42.403 回答