片段中的ImageView给出null

时间:2014-03-20 16:33:00

标签: android imageview onclicklistener

我在片段中的onCreateView中有这个代码:

star = (ImageView) rootView.findViewById(R.id.heart);
    star.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(getActivity(),"the star was clicked",
                   Toast.LENGTH_LONG).show();
        }
    });

并且它给出了空指针异常。任何人都知道它会是什么?

编辑:我正在编辑,因为答案没有说明如何解决问题。问题是rootView(我正在膨胀的视图)是一个自定义列表视图,我稍后会在其中扩展布局item_row以在视图中定义单个行。心脏id在此item_row中定义,但我试图从rootView访问它,当然这是不可能的。那么有人能为我提供一个如何做到这一点的例子吗?

2 个答案:

答案 0 :(得分:3)

我正在做同样的事情。这是一个有效的例子。确保您尝试访问的视图在您正在膨胀的布局中定义了ID。在我的示例中,R.layout.lesson_video_fragment具有使用ID R.id.lesson_video定义的ImageView。

布局文件(lesson_video_fragment.xml):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" 
android:orientation="vertical">

<ImageView 
    android:id="@+id/lesson_video"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:contentDescription="Video"
    android:scaleType="centerCrop"
    />

</LinearLayout>


public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View v = inflater.inflate(R.layout.lesson_video_fragment, container, false);

    videoImage = (ImageView)v.findViewById(R.id.lesson_video);

    videoImage.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            //do your thing
        }           
    });

答案 1 :(得分:1)

R.id.heart不属于rootView。这意味着未在onCreateView内充气的布局中声明。