如何向片段中创建的 activity 添加回调?
How to add a callback to an activity that's created in a fragment?
我有一个带有按钮的片段,它在 clicked/pressed:
时调用以下方法
public void onClick() {
Intent intent = new Intent(getActivity(), MyNewActivity.class);
startActivity(intent)
}
但是,我想将在 activity 的 onDestroy
方法中调用的回调方法传递给 MyNewActivity
。我需要回调方法来调用片段的 finish()
方法。
我尝试使用静态变量并且它有效,但这似乎是一个糟糕的设计。最好的方法是什么?如果不通过回调方法,什么是更好的方法?
按照评论中的建议使用 startActivityForResult()
。
使用以下代码:
片段:
public class MyFragment extends Fragment {
private static final int REQUEST_CODE = 1353;
@Override public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment, container, false);
v.findViewById(R.id.btn_start).setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
Intent intent = new Intent(getActivity(), SecondActivity.class);
startActivityForResult(intent, REQUEST_CODE);
}
});
return v;
}
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE) {
Toast.makeText(getActivity(), "Hooray! Fragment got result from activity!", Toast.LENGTH_SHORT).show();
}
}
}
第二个Activity:
public class SecondActivity extends Activity {
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second_activity);
findViewById(R.id.btn_finish).setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
setResult(Activity.RESULT_OK);
finish();
}
});
}
}
我有一个带有按钮的片段,它在 clicked/pressed:
时调用以下方法public void onClick() {
Intent intent = new Intent(getActivity(), MyNewActivity.class);
startActivity(intent)
}
但是,我想将在 activity 的 onDestroy
方法中调用的回调方法传递给 MyNewActivity
。我需要回调方法来调用片段的 finish()
方法。
我尝试使用静态变量并且它有效,但这似乎是一个糟糕的设计。最好的方法是什么?如果不通过回调方法,什么是更好的方法?
按照评论中的建议使用 startActivityForResult()
。
使用以下代码:
片段:
public class MyFragment extends Fragment {
private static final int REQUEST_CODE = 1353;
@Override public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment, container, false);
v.findViewById(R.id.btn_start).setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
Intent intent = new Intent(getActivity(), SecondActivity.class);
startActivityForResult(intent, REQUEST_CODE);
}
});
return v;
}
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE) {
Toast.makeText(getActivity(), "Hooray! Fragment got result from activity!", Toast.LENGTH_SHORT).show();
}
}
}
第二个Activity:
public class SecondActivity extends Activity {
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second_activity);
findViewById(R.id.btn_finish).setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
setResult(Activity.RESULT_OK);
finish();
}
});
}
}