我在片段中的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访问它,当然这是不可能的。那么有人能为我提供一个如何做到这一点的例子吗?
答案 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
内充气的布局中声明。