我有一个片段的活动,然后该片段调用一些活动,该活动将为第一个活动提供一些价值。我使用onActivityResult,但我不知道为什么resultCode总是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);
}
然后在活动二中,当我触摸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);
}
}
但是,我不知道为什么,onActivityResult我无法获取数据。 我的最终目的是,我想将数据设置为fragmentX。
答案 0 :(得分:0)
在第一个活动中写下以下代码:
第一种方法:
@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()而不是getContext()例如:
private final int REQUEST_CODE = 10;
Intent intent = new Intent(getActivity(),Main2Activity.class);
intent.putExtra("xxx","test1");
getActivity().startActivityForResult(intent,REQUEST_CODE);
答案 1 :(得分:0)
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();
}
答案 2 :(得分:0)
开始新活动
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”启动了第二个活动。所以当你使用setResult(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管理自己的片段列表。 希望如果您需要任何其他帮助通知我,这将对您有所帮助。