Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 片段中的ImageView提供null_Android_Imageview_Onclicklistener - Fatal编程技术网

Android 片段中的ImageView提供null

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

我在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是一个自定义列表视图,稍后我在其上膨胀布局项_行以定义视图中的一行。心脏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
        }           
    });