Java 将消息发送到上一个片段

Java 将消息发送到上一个片段,java,android,android-fragments,Java,Android,Android Fragments,我有两个片段。比如片段A和片段B。现在在点击片段A中的某个按钮后,我使用下面的代码启动片段B getFragmentManager() .beginTransaction() .replace(R.id.framelayout, companyDetailsFragment) .addToBackStack(null)

我有两个片段。比如片段A和片段B。现在在点击片段A中的某个按钮后,我使用下面的代码启动片段B

            getFragmentManager()
                    .beginTransaction()
                    .replace(R.id.framelayout, companyDetailsFragment)
                    .addToBackStack(null)
                    .commit(); 
getFragmentManager().popBackStack()
现在我在片段B中有了另一个后退按钮 我使用下面的代码删除这个特定的片段

            getFragmentManager()
                    .beginTransaction()
                    .replace(R.id.framelayout, companyDetailsFragment)
                    .addToBackStack(null)
                    .commit(); 
getFragmentManager().popBackStack()
现在我想要的是,当用户点击后退按钮时,我想把一些特定的数据传递给前面的片段A

onStart()
方法没有被调用,因此我没有得到任何值。
那么如何获取数据呢?我们将非常感谢您的帮助。

您有几个选择:

  • 将要传递的值存储在全局范围的变量中(SharedPrefs,使用可从应用程序类访问的单例,等等)

  • 启动片段的一个新实例,并将该变量作为额外的意图包含在内


  • 好了,当从堆栈开始时,没有办法向片段添加额外的内容(如果可以传递变量,您可以在onResume()中访问它)。

    我能够解决它。下面是我的答案

    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.在活动类中使用该侦听器

    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.在类片段中创建方法

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

    从中获得参考。希望这对其他人有帮助。如果有人有其他好的解决方案,请回答这个问题。

    你也可以在片段的
    OnResume()中获取数据。请参考此链接:@prshntjjjl_android我也尝试过resume()。但抱歉,soham不工作,因此我需要研发:(谢谢你的回答。我不想使用任何全局变量,因为这是一种不好的做法。我认为创建任何新实例都不是一个好主意。不过谢谢你的帮助