在API23之前,我使用片段的onAttach方法来获取我的侦听器实例,然后在onDetach内部清除引用。例如:
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
mListener = null;
try {
mListener = (SellFragmentListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement SellFragmentListener");
}
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
在onAttach(上下文)中执行相同的检查安全吗?还是有更好的方法获取holder活动实例?
不推荐使用的是onAttach(活动)
方法,但整个流程仍保留。所以你可能什么都不做,比如
onAttach(活动)
仍将被支持足够长的时间。
如Zsolt Mester的回答所示,onAttach(活动活动)
不建议使用onAttach(上下文上下文)
。因此,您所需要做的就是检查以确保上下文是一个活动。
在Android Studio如果你去文件
import android.support.v4.app.Fragment;
...
public class MyFragment extends Fragment {
private OnFragmentInteractionListener mListener;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// inflate fragment layout
return inflater.inflate(R.layout.fragment_myfragment, container, false);
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof OnFragmentInteractionListener) {
mListener = (OnFragmentInteractionListener) context;
} else {
throw new RuntimeException(context.toString()
+ " must implement OnFragmentInteractionListener");
}
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
public interface OnFragmentInteractionListener {
// TODO: Update argument type and name
void onFragmentInteraction(Uri uri);
}
}
笔记
>
由于父活动必须实现我们的OnFragmentInteractionListener
(任意命名的接口),检查(OnFragmentInteractionListener的上下文实例)
确保上下文实际上是活动。
请注意,我们正在使用支持库。否则onAttach(上下文上下文)
不会被Android的API 23版本调用。
另见
检查源代码:
/**
* Called when a fragment is first attached to its context.
* {@link #onCreate(Bundle)} will be called after this.
*/
public void onAttach(Context context) {
mCalled = true;
final Activity hostActivity = mHost == null ? null : mHost.getActivity();
if (hostActivity != null) {
mCalled = false;
onAttach(hostActivity);
}
}
/**
* @deprecated Use {@link #onAttach(Context)} instead.
*/
@Deprecated
public void onAttach(Activity activity) {
mCalled = true;
}
因此,如果存在主机活动,onAttach(上下文上下文)
将调用onAttach(活动活动)
。您可以安全地使用onAttach(活动)
。
我更新了我的应用程序,使用了最新的支持库(23.0.0版),我发现他们不推荐使用Fragment类的onAttach()函数。 而不是: 现在是: 由于我的app使用的是弃用前通过的活动,我认为一个可能的解决方案是: 点击这里查看我几周前打开的bug报告,以及谷歌的人给出的答案。
问题内容: 在阅读有关将容器链接在一起的知识时,他们现在将其称为 旧版链接, 本文声称在Docker 1.9中已弃用,[发行说明中未提及此内容,弃用功能列表也未提及。 题 为什么Docker现在需要旧版链接?我应该停止使用它们吗? 问题答案: 泊坞窗网络被晋升为继任者- https://docs.docker.com/engine/userguide/networking/ 在使用Docker网络
我在TypeScript中使用一个接口来定义一个函数,该函数仅在扩展基类的一些类上可用。这是我到目前为止的代码的简化版本: 现在,问题是我会添加更多的“行走”动物,这样移动动物的功能就会变得太大而无法控制。我想做的事情是这样的: 但是,“implements”检查不起作用,在使用接口时,我找不到与“instanceof”等效的。在Java中,“instanceof”的使用似乎可以在这里使用,但Ty
问题内容: 我在对此答案的评论中阅读了有关过时的计划(抱歉,没有参考)的其他许多问题。我真的希望不要,因为我将它用作Java中调度事情的简便方法(而且效果很好)。但是,如果过时了,我会去别处。 但是,快速浏览 1.6版 的API文档并没有说明它已被弃用。Sun的“ 不推荐使用的清单”中甚至都没有提到它。 是否正式弃用 *,如果是,我应该使用什么代替? 另一方面, 如果不弃用它,* 人们是否可以停止
问题内容: 您已经意识到了一个古老的问题:包含浮动元素的容器不会自动扩展其高度以围封其子级。 解决此问题的一种方法是“clearfix”,它添加了许多CSS规则以确保容器正确延伸。 但是,仅提供容器似乎同样有效,并且具有相同的浏览器兼容性。 这是否意味着不建议使用“ clearfix”?使用它还有什么优势吗? 这里有一个非常相似的问题:clearfixhack和overflow:hidden与ov
问题内容: 假设我有一个Python函数和。旨在以递归方式调用自身。不应递归调用。有没有办法确定是否已递归调用它? 问题答案: 为此使用追溯模块: 因此,如果堆栈中的任何条目指示从调用了代码,则该调用是(间接)递归的。该方法使您可以轻松访问此数据。下面的示例中的语句仅计算函数名称的完全匹配数。为了使它更漂亮(感谢agf的想法),您可以将其变成装饰器: