Android 片段中的ImageView提供null
我在onCreateView的片段中包含以下代码:Android 片段中的ImageView提供null,android,imageview,onclicklistener,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
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是一个自定义列表视图,稍后我在其上膨胀布局项_行以定义视图中的一行。心脏id是在这个item_行中定义的,但是我试图从rootView访问它,当然这是不可能的。那么有人能给我举个例子说明我该如何做吗?
R.id.heart
不属于rootView
。这意味着在您的onCreateView
R.id.heart
不属于rootView
的布局中没有声明。这意味着在您的onCreateView
中膨胀的布局中没有声明,我也在做同样的事情。下面是一个有效的例子。确保您尝试访问的视图在正在膨胀的布局中定义了id。在我的示例中,R.layout.lesson_video_片段具有在中定义的ImageView,ID为R.ID.lesson_video
布局文件(lesson_video_fragment.xml):
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图v=充气机。充气(R.layout.lesson\u视频\u片段,容器,错误);
videoImage=(ImageView)v.findviewbyd(R.id.lesson\u视频);
videoImage.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//做你的事
}
});
我也在做同样的事情。下面是一个有效的示例。请确保您尝试访问的视图具有在正在膨胀的布局中定义的id。在我的示例R.layout.lesson\u video\u片段中,有一个在中定义的ImageView,id为R.id.lesson\u video
布局文件(lesson_video_fragment.xml):
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图v=充气机。充气(R.layout.lesson\u视频\u片段,容器,错误);
videoImage=(ImageView)v.findviewbyd(R.id.lesson\u视频);
videoImage.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//做你的事
}
});
我尝试使用getActivity()而不是rootView,但也不起作用。我尝试使用getActivity()而不是rootView,但也不起作用。那么我如何获得它?因为它位于另一个用于listview(rootView)的名为item_row的布局中。打开布局并声明一个id为heartI的ImageView我应该从项_行布局中添加相同的一个?我明白了。。但是您可能需要在自定义adapterview的getView方法中移动onClickListener逻辑。View具有方法setTag。使用它将列表项设置为标记,并像v.getTag()一样检索它。您需要将其强制转换为正确的对象。我如何才能获得它?因为它位于另一个名为item_row的布局中,该布局用于listview(根视图)。打开布局并声明一个id为heartI的ImageView我应该从项_行布局中添加相同的一个?我明白了。。但是您可能需要在自定义adapterview的getView方法中移动onClickListener逻辑。View具有方法setTag。使用它将列表项设置为标记,并像v.getTag()一样检索它。您需要将其强制转换为正确的对象是否引用其他布局中的对象?这很有帮助!我使用的是:ImageView image=(ImageView)getView.findViewById(R.id.user_image);将getView()更改为view(分配给膨胀视图的实际变量)解决了问题。谢谢!这是指另一个布局中的一个吗?这很有帮助!我使用了:ImageView image=(ImageView)getView.findViewById(R.id.user\u image);将getView()更改为view(分配给膨胀视图的实际变量)解决了问题。谢谢!
<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
}
});