如何从扩展Fragment而不是Activity的类中正确检索声明为片段布局的ImageView?

时间:2016-06-20 12:39:17

标签: java android android-layout android-fragments android-imageview

尝试将布局元素检索到类中时遇到以下问题。

所以我有以下情况:

1)我有这个 fragment_screen_slide_page.xml 文件,其中包含显示在视图中的片段元素:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/content"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- Dummy content. -->
    <LinearLayout android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:padding="0dp">

        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="wrap_content"
            android:scaleType="fitCenter"
            android:layout_height="250dp"
            android:background="@drawable/carbonara" />

        <TextView android:id="@android:id/text1"
            style="?android:textAppearanceLarge"
            android:textStyle="bold"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="16dp" />

    </LinearLayout>

</ScrollView>

如您所见,它包含 ImageView 元素 id = imageView1

然后我有这个 ScreenSlidePageFragment 对前一个片段有效,我有这样的事情:

public class ScreenSlidePageFragment extends Fragment {

    ................................................................
    ................................................................
    ................................................................

    @Override
    public void onCreate(Bundle savedInstanceState) {
        ................................................................
        ................................................................
        ................................................................
        // Retrieve the reference of the ImageView element of the layout having id=imgSlide:
        ImageView imgSlideView = (ImageView) this.getActivity().findViewById(R.id.imageView1);
        ................................................................
        ................................................................
        ................................................................
    }

    ................................................................
    ................................................................
    ................................................................
}

正如您所看到的,进入 onCreate()方法我试图检索 id = imageView1 元素的 ImageView 引用通过以下指令定义到 fragment_screen_slide_page.xml 文件中:

ImageView imgSlideView = (ImageView) this.getActivity().findViewById(R.id.imageView1);

我已经完成了这个.getActivity()。findViewById(R.id.imageView1)因为 ScreenSlidePageFragment 扩展了片段而不是活动所以它没有继承 findViewById()方法,我无法直接执行 findViewById(R.id.imageView1); ,因为我完成了一个扩展的类活动

问题在于,以这种方式我获得 null 作为结果。

为什么呢?我错过了什么?如何正确检索 ScreenSlidePageFragment (扩展片段片段中声明为 fragment_screen_slide_page.xml 文件的 ImageView 不是活动)?

3 个答案:

答案 0 :(得分:1)

试试: 将代码从oncreate移至覆盖onCreateView

public  View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState)
{
        View view = inflater.inflate(R.layout.fragment_screen_slide_page,container,false);
        ImageView imgSlideView = (ImageView) view.findViewById(R.id.imageView1);
        return view;    
}

答案 1 :(得分:1)

onViewCreated

内拨打电话
    @Override
    public void onViewCreated(View view, @Nullable Bundle  savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        ImageView imgSlideView = (ImageView) view.findViewById(R.id.imageView1);
    }

答案 2 :(得分:1)

而不是onCreate(),您可以覆盖onViewCreated()并从那里获取ImageView

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    ImageView imgSlideView = (ImageView) view.findViewById(R.id.imageView1);
}