从另一个活动中调用一个活动中的片段方法

时间:2019-12-27 10:16:54

标签: android-fragments android-activity

我有一个// The rest of the code is the same void openDropdown() { _dropdownButtonKey.currentContext.visitChildElements((element) { if (element.widget != null && element.widget is Semantics) { element.visitChildElements((element) { if (element.widget != null && element.widget is Actions) { element.visitChildElements((element) { Actions.invoke(element, Intent(ActivateAction.key)); return false; }); } }); } }); } A ,其中有一个Activity和一个Fragment B

当我单击片段内的按钮时,活动 B 开始,并且我假设活动 A Activity

我想做的是单击活动 B 中的按钮,该按钮将onPause进行此活动,然后返回到活动 A

这样做将自动在片段内调用一个方法。经过研究,我尝试实现finish()和Fragment事务,但是我总是得到空对象。

在这种配置下,如何使我的活动进行交流并将信息传递给片段?

1 个答案:

答案 0 :(得分:1)

ActivityB(属于FragmentA的一部分)以ActivityA呼叫startActivityForResult(),而不是startActivity()呼叫。

使用此方法,您可以将结果从Activity B传递回Fragment A

Fragment AActivityA的一部分):

// 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
    }
}

重要点Fragment A是调用startActivityForResult()的那个,但它是Activity A的一部分,因此Activity A获得了第一枪处理结果。它必须调用super.onActivityResult(),以便回调可以到达Fragment A

Activity A中:

@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
}

Activity B设置结果:

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();

参考:

  1. https://stackoverflow.com/a/22554156/1994950
  2. https://stackoverflow.com/a/6147919/1994950
  3. Start Activity for result