Android onActivityResult中的结果代码0和数据0

Android onActivityResult中的结果代码0和数据0,android,null,onactivityresult,Android,Null,Onactivityresult,我有一个带有一个片段的活动,然后该片段调用某个活动,该活动将为第一个活动提供一些值。我使用onActivityResult,但我不知道为什么结果代码总是0,数据总是0 关于活动一,我有 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Log.

我有一个带有一个片段的活动,然后该片段调用某个活动,该活动将为第一个活动提供一些值。我使用onActivityResult,但我不知道为什么结果代码总是0,数据总是0

关于活动一,我有

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Log.d(TAG, "onActivityResult: "+ requestCode +" "+resultCode+" "+data);

}
活动一有一些称为活动二的片段X

private final int REQUEST_CODE = 10;
private void start (){
    Intent intent = new Intent(getContext(),Main2Activity.class);
        intent.putExtra("xxx","test1");
        getActivity().startActivityForResult(intent,REQUEST_CODE);
}
然后在活动2中,当我触摸BackPress时,将传递一些值

public class Main2Activity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
        Intent intent = getIntent().putExtra("yyy","test2");
        setResult(RESULT_OK,intent);
    }
}
但是,我不知道为什么,在活动中结果我无法获得数据。
我的最终目的是,我想将数据设置为fragmentX。

在第一个活动中编写以下代码:

第一种方法:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    for (Fragment fragment : getSupportFragmentManager().getFragments()) {
        fragment.onActivityResult(requestCode, resultCode, data);
    }
}
零碎

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // In fragment write your logic here
}
第二种方法:(我没有尝试,但根据文档,这可能是原因之一,请尝试一次)如果它不起作用,请使用第一种方法100%解决

当您使用getContext()调用第二个活动时

getContext()-仅返回当前正在运行的活动的上下文视图

getActivity()-返回此片段当前关联的活动

尝试在调用下一个活动的意图时使用getActivity()而不是getContext()

Ex:

private final int REQUEST_CODE = 10;
Intent intent = new Intent(getActivity(),Main2Activity.class);
intent.putExtra("xxx","test1");
getActivity().startActivityForResult(intent,REQUEST_CODE);

1.您可以在片段中调用
onActivityResult

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Log.d(TAG, "onActivityResult: "+ requestCode +" "+resultCode+" "+data);

}
2.使用
super.onBackPressed()setResult
之后编码

@Override
public void onBackPressed() {

    Intent intent = getIntent().putExtra("yyy","test2");
    setResult(RESULT_OK,intent);
    super.onBackPressed();
}
开始新的活动

private final int REQUEST_CODE = 10;
private void start (){
    Intent intent = new Intent(getContext(),Main2Activity.class);
        intent.putExtra("xxx","test1");
        getActivity().startActivityForResult(intent,REQUEST_CODE);
}
从第二个活动开始

public class Main2Activity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
        Intent intent = getIntent().putExtra("yyy","test2");
        setResult(10,intent);
    }
}
您必须设置启动第二个活动所使用的整数代码。您已开始代码为“10”的第二个活动。因此,在设置结果(10,intent)时使用相同的值

onActivityResult您需要检查请求代码

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode==10){
        if(data!=null)
        {
       //you have to manage your own list of fragments for activity because getSupportFragmentManager().getFragments() is deprecated now.

    //Send data to fragments
    if (arrayFragments != null) {
        for (Fragment fragment : arrayFragments) {
            fragment.onActivityResult(requestCode, resultCode, data);
        }
    }
 }
   }

}
请记住,您必须使用ArrayList或HashMap管理自己的片段列表。
如果您需要任何其他帮助,希望这能帮助您通知我。

您必须将活动的结果传递到碎片对不起,我仍然不清楚。首先删除super.onBackPressed();行,然后检查是否删除super.onbackpressed,UI将不会更改为第一个活动;在你的方法中设置结果之后,这是最主要的事情