作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我阅读了有关创建接口(interface)以便能够在父 Activity 和 fragment 之间进行通信的官方 Android 文档。所以我这样做了,但是当我调用其中一种方法从父 Activity 中获取值时,我的应用程序崩溃了。
如果我的 fragment 中有这样的界面
公共(public)接口(interface) InteractWithFragmentA {
字符串 getStringText();
}
在我的通话 Activity 中,我使用虚拟文本对其进行了测试
@Override
public String getStringText(){ return "Some dummy text";}
我在 FragmentA.java 中有一个变量,它是对主机 Activity 的引用并转换为 InteractWithFragmentA,但是当我调用该方法时使用
_hostActivity.getStringText()
应用程序崩溃。有什么我想念的吗?我已经看到一些建议的方法,通过将主机 Activity 的变量设为公共(public)和静态或其他一些方法来获取主机 Activity 的变量,但我试图不将 fragment 耦合到该 Activity 。提前致谢。
最佳答案
你应该这样做:
Activity
public class YourActivity implements YourActivityInterface{
@Override public String getStringText(){ return "Some dummy text";}
}
Interface
public interface YourActivityInterface {
String getStringText();
}
Fragment
public class YourFragment extends Fragment {
YourActivityInterface mListener;
//your method...
mListener.getStringText()
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof YourActivityInterface) {
mListener = (YourActivityInterface) context;
} else {
throw new RuntimeException(context.toString()
+ " must implement YourActivityInterface");
}
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
}
关于java - Android - 如何从 fragment 的父 Activity 中正确获取变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47271747/
我是一名优秀的程序员,十分优秀!