将消息发送到上一个片段

时间:2015-06-27 13:15:54

标签: java android android-fragments

我有两个fragmnent.Say片段A和片段B.现在点击片段A中的某个按钮后我使用下面的代码开始片段B

            getFragmentManager()
                    .beginTransaction()
                    .replace(R.id.framelayout, companyDetailsFragment)
                    .addToBackStack(null)
                    .commit(); 

现在我在片段B中有另一个后退按钮。单击该按钮后 我正在使用下面的代码

删除该特定片段
getFragmentManager().popBackStack()

现在我想要的是当用户点击后退按钮时我想将某些数据传递给之前的片段A.问题是

onStart()方法没有被调用,所以我没有得到任何值。 那么如何获取数据?任何帮助都将受到赞赏。

2 个答案:

答案 0 :(得分:3)

我能够解决它。这是我的答案

1.创建一个界面

public interface OnButtonPressListener {
    public void onButtonPressed(String msg);
}

2.在片段B中实现这一点

 @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            buttonListener = (OnButtonPressListener) getActivity();
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString() + " must implement onButtonPressed");
        }
    }

 back.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getFragmentManager().popBackStack();
               buttonListener.onButtonPressed("Message From First Fragment");
            }
        });

3.在Activity类中使用该侦听器

public class ParentActivity extends FragmentActivity implements OnButtonPressListener { 
@Override
    public void onButtonPressed(String msg) {
        FragmentA Obj=(FragmentA) getSupportFragmentManager().findFragmentById(R.id.framelayout);
        Obj.setMessage(msg);
    }
}

4.处理片段A类中的方法

public void setMessage(String msg){
       System.out.print("got it");
    }

得到了this的参考资料。希望这对别人有帮助。如果有其他人有其他好的解决方案,请回答这个问题。

答案 1 :(得分:0)

您有几个选择:

  1. 将要传递的值存储在全局范围的变量中(SharedPrefs,使用可从Application类访问的单例等)。

  2. 启动Fragment的新实例,并将该变量包含为Intent Extra。

  3. AFAIK,没有办法在从堆栈开始时为片段添加额外内容(如果可以传递变量,你可以在onResume()中访问它。)