我是 Android 新手,我正在尝试掌握创建和使用 fragment 的窍门。
我有一个 fragment ,显示了可供选择的多个日期的简单列表,并实现了 onClickListener。这个想法是,一旦用户选择了日期, fragment 就会将日期发送回 MainActivity,然后 MainActivity 在数据库中运行查询并将数据库响应发送到另一个 fragment 。
我陷入了将日期优雅地发送回 MainActivity 的困境。我找不到太多信息。我发现了这个:
Activity activity = getActivity();
if(activity instanceof MyActivity){
MyActivity myactivity = (MyActivity) activity;
myactivity.myMethod();
}
我对此很陌生,但这对我来说似乎很奇怪。这是正确的方法还是还有其他方法?
欢迎任何意见
最佳答案
我更喜欢基于界面的方法,因为它非常干净。您可以在 Fragment
或外部接口(interface)中声明嵌套接口(interface):
interface OnMyStuffListener {
void myMethod();
}
创建Activity
来实现该接口(interface):
public class MainActivity extends Activity implements OnMyStuffListener {
@Override
public void myMethod() {
// Do whatever you want.
}
}
Fragment
将附加到 Activity
,以便您可以检查 Context
的实例并将其转换为 Activity
:
public class MyFragment extends Fragment implements View.OnClickListener {
private OnMyStuffListener mListener;
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof OnMyStuffListener) {
mListener = (OnMyStuffListener) context;
} else {
throw new IllegalArgumentException("The context " + context.getClass().getName() +
"must implement " + OnMyStuffListener.class.getName());
}
}
@Override
public void onDetach() {
super.onDetach();
// Release it avoiding memory leak.
mListener = null;
}
@Override
public void onClick(View v) {
mListener.myMethod();
}
}
关于java - android 从 fragment 调用 MainActivity 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43747069/