编译器错误,frameLayout无法解析或不是字段,在FragmentActivity中,如何获取视图



在Fragment内部,我想获得Fragment所在的Activity的根视图的宽度和高度。getActivity()方法可以用于从片段内部获取活动,但不能用于获取活动中的视图。

我不想使用ViewTreeObserver.OnGlobalLayoutListener,而是想覆盖片段中的onActivityCreated方法,并使用frameLayout.getWidth()和frameLayout.geHeight()方法来获取这些测量值。我以前看到过这个建议,但无法实现。未解析xml文件中名为frameLayout1的FrameLayout。所以我在这里使用的代码有问题。为什么它不起作用?

@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
FrameLayout frameLayout =
(FrameLayout) getView().findViewById(R.id.frameLayout1);
// frameLayout cannot be resolved or is not a field, error
}

xml 的小片段

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/frameLayout1" > <-- here is the frame layout I want to measure
<fragment
android:id="@+id/xxxFragment"
android:name="com.XXX.XXX.XXXSupport"
android:layout_width="match_parent"
android:layout_height="match_parent" />

使用getActivity()而不是getView()

FrameLayout frameLayout = (FrameLayout) getActivity().findViewById(R.id.frameLayout1);

Fragment可以使用getActivity()访问Activity实例,并且可以轻松地执行诸如在活动布局中查找视图之类的任务。

检查与活动通信的主题

http://developer.android.com/guide/components/fragments.html

我发现了getActivity()不起作用的原因,这是一个被忽略的小错误,我忘记为正在使用getActivity()方法的库项目导入"R"。

在基于Eclipse的Android SDK工具版本中,库项目是当前项目引用的其他项目。

在这个项目中,片段类在库项目中,该片段在引用库类的主项目的Activity类中实例化。

这种情况很不常见,因为通常的方法是引用主项目中库项目中的变量和方法。当使用getActivity()时,它正朝着相反的方向发展,库项目引用来自主项目的代码。

它必须被导入,例如在调用getActivity()方法的库项目类中,需要R的import语句来使用findViewById()方法访问主项目的任何视图或视图组。

import com.main.project.package.name.R;

现在getActivity()方法工作起来没有问题,我现在可以访问主项目的FrameLayout视图并获得该视图的宽度和高度。

最新更新