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



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

在活动一上,我有

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

1 有一些 fragmentX,它调用活动 2

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

然后在活动二中,当我触摸 onBackpress 时,将传递一些值。

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。

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.在方法中使用setResultsuper.onBackPressed();

@Override
public void onBackPressed() {
    Intent intent = getIntent().putExtra("yyy","test2");
    setResult(RESULT_OK,intent);
    super.onBackPressed();
}

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

第一种方法:

@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()- 返回此片段当前关联的活动。

尝试代替getContext()在调用下一个活动的意图时使用getActivity()

前任:

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

用于开始新活动

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"启动了第二个活动。因此,当您设置Result(10,意图)时使用相同的值;

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管理自己的片段列表。如果您需要任何其他帮助,希望这会对您有所帮助,请通知我。

如果你想在onActivityResult中发送返回数据,那么你应该在setResult()方法的数据集之后使用super.onBackPressed()

例:

@Override
public void onBackPressed() {
    val intent = Intent()
    intent.putExtra("IsReturnData", true)
    setResult(RESULT_OK,intent);
    super.onBackPressed();  //write this line at the end of method
}

相关内容

  • 没有找到相关文章

最新更新