我这里有三个项目:一个名为ActivityName
的基本活动,一个名为FragmentName
的活动调用的片段,以及从该片段调用的dialogFragment
。
我想从驻留在片段中的对话框中调用一个方法。我使用以下方法做到了这一点:
((ActivityName) getActivity()).fragmentName.methodInFragment();
我一直在尝试一些不同的解决方案,并最终找到了这个解决方案。我理解发生了什么,但我不明白(ActivityName)
正在做什么。我的猜测是它将getActivity
转换为实际的活动类型,因此我可以从中调用它(就像我在其中声明的片段的实例)。这是发生了什么事,还是我离开了?
这是我在访问我在XML中定义的TextView
时使用的相同类型的东西。例如TextView myTextView = (TextView) findViewById(R.id.thetextview);
?
答案 0 :(得分:1)
它被称为演员。 getActivity()
返回一个Activity对象,而((ActivityName)getActivity())
指定getActivity()
实际上是类ActivityName
的对象。转换为特定类型允许您访问不属于超类的成员和方法(public
)。如果您定义了错误的演员表,您将获得ClassCastException
。
是的,是的。这是我访问时使用的相同类型的东西 TextView我已经用XML定义了。例如TextView myTextView =(TextView) findViewById(R.id.thetextview);
findViewById
会返回View
,并告知View
实际上是TextView
。如果代替TextView
,R.id.thetextview
是ImageButton
的ID,则将其投放到TextView
会导致ClassCastException