Android fragments 从另一个活动调用活动内的片段方法

Android fragments 从另一个活动调用活动内的片段方法,android-fragments,android-activity,Android Fragments,Android Activity,我有一个活动A和一个片段和一个活动B 当我单击片段内的按钮时,活动B正在启动,我假设活动a是onPause 我想做的是单击活动B中的一个按钮,该按钮将finish()此活动,然后返回活动a 这样做会自动调用片段内部的方法。经过研究,我尝试实现接口和片段事务,但总是得到空对象 如何使我的活动进行通信并将信息传递给此配置中的片段 从FragmentA(属于ActivityA)调用ActivityB,作为startActivityForResult()调用,而不是startActivity()调用 使

我有一个
活动
A和一个
片段
和一个
活动
B

当我单击片段内的按钮时,活动B正在启动,我假设活动a
onPause

我想做的是单击活动B中的一个按钮,该按钮将
finish()
此活动,然后返回活动a

这样做会自动调用片段内部的方法。经过研究,我尝试实现
接口
和片段事务,但总是得到空对象


如何使我的活动进行通信并将信息传递给此配置中的片段

FragmentA
(属于
ActivityA
)调用
ActivityB
,作为
startActivityForResult()
调用,而不是
startActivity()
调用

使用此选项,您将能够将结果从
活动B
传递回
片段A

片段A
(活动A的一部分):

要点
片段A
是进行startActivityForResult()调用的片段,但它是
活动A
的一部分,因此
活动A
首先处理结果。它必须调用
super.onActivityResult()
,以便回调可以到达
片段A

活动A中

// Calling Activity B
Intent intent = new Intent(this, ActivityB.class); 
intent.putExtras(b);    
startActivityForResult(intent, ANY_ID);

// Overriding callback for result
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == ANY_ID && resultCode == Activity.RESULT_OK) {
        // Your logic of receiving data from Activity B
    }
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    // This is required, in order to get onActivityResult callback in Fragment A
}
Intent resultIntent = new Intent();
// You can pass any data via this intent's bundle by putting as key-value pair
resultIntent.putExtra("Key", Value);
setResult(Activity.RESULT_OK, resultIntent);
finish();
活动B设置返回的结果

// Calling Activity B
Intent intent = new Intent(this, ActivityB.class); 
intent.putExtras(b);    
startActivityForResult(intent, ANY_ID);

// Overriding callback for result
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == ANY_ID && resultCode == Activity.RESULT_OK) {
        // Your logic of receiving data from Activity B
    }
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    // This is required, in order to get onActivityResult callback in Fragment A
}
Intent resultIntent = new Intent();
// You can pass any data via this intent's bundle by putting as key-value pair
resultIntent.putExtra("Key", Value);
setResult(Activity.RESULT_OK, resultIntent);
finish();
参考: