3

我有 2 个片段,片段 A 和片段 B。我通过使用 将片段 B 添加到片段 A 上FragmentTransaction().add,这意味着片段 A 是片段 B 的基础。在我对片段执行某些操作后,有没有办法更改片段 A 中的数据B 并按下片段 B的后退按钮?我希望有一种通用的方式来通知 Fragment A。因为它可能是另一个被覆盖的 Fragment。我尝试使用FragmentTransaction.replace()- 它可以很好地刷新上一页。

4

1 回答 1

6

只需覆盖onBackPressed()您的活动和片段并在那里进行所需的调用。

更多关于回调/与其他片段的通信可以在这里找到:

与其他 Fragment 通信

public class FragmentA extends Fragment {
    public void updateMyself(String updateValue){
        Log.v("update", "weeee Fragment B updated me with" + updateValue);
    }
}

public class FragmentB extends Fragment {

    public Interface FragmentBCallBackInterface {
        public void update(String updateValue);
    }

    private FragmentBCallBackInterface mCallback;

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

        try {
            mCallback = (FragmentBCallBackInterface) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement FragmentBCallBackInterface");
        }
        //As an example we do an update here - normally you wouln't call the method until your user performs an onclick or something 
        letsUpateTheOtherFragment();
    }

    private void letsUpateTheOtherFragment(){
        mCallback.update("This is an update!);
    }
}


public class MyActivity extends Activity implements FragmentInterfaceB {

    @Override
    public void update(String updateValue){
          FragmentA fragmentA = (FragmentA) getSupportFragmentManager().findFragmentById(R.id.article_fragment);

        if (fragmentA != null) {
            fragmentA.updateMyself(updateValue);
        } else {
            //replace the fragment... bla bla check example for this code
        }
    }
}
于 2013-04-18T11:11:32.277 回答