((ActivityName)getActivity())。FragmentName.methodInFragment(); - 什么是(ActivityName)正在做什么以及它是如何工作的?

时间:2015-06-25 19:57:25

标签: android android-fragments casting android-dialogfragment

我这里有三个项目:一个名为ActivityName的基本活动,一个名为FragmentName的活动调用的片段,以及从该片段调用的dialogFragment

我想从驻留在片段中的对话框中调用一个方法。我使用以下方法做到了这一点:

((ActivityName) getActivity()).fragmentName.methodInFragment();

我一直在尝试一些不同的解决方案,并最终找到了这个解决方案。我理解发生了什么,但我不明白(ActivityName)正在做什么。我的猜测是它将getActivity转换为实际的活动类型,因此我可以从中调用它(就像我在其中声明的片段的实例)。这是发生了什么事,还是我离开了?

这是我在访问我在XML中定义的TextView时使用的相同类型的东西。例如TextView myTextView = (TextView) findViewById(R.id.thetextview);

1 个答案:

答案 0 :(得分:1)

它被称为演员。 getActivity()返回一个Activity对象,而((ActivityName)getActivity())指定getActivity()实际上是类ActivityName的对象。转换为特定类型允许您访问不属于超类的成员和方法(public)。如果您定义了错误的演员表,您将获得ClassCastException

  

这是我访问时使用的相同类型的东西   TextView我已经用XML定义了。例如TextView myTextView =(TextView)   findViewById(R.id.thetextview);

是的,是的。 findViewById会返回View,并告知View实际上是TextView。如果代替TextViewR.id.thetextviewImageButton的ID,则将其投放到TextView会导致ClassCastException