Android 未识别onClick(视图v)

Android 未识别onClick(视图v),android,Android,这个片段用于理解片段是如何工作的。但是,错误消息“类型ImageFragment必须实现继承的抽象方法View.OnClickListener.onClick(视图) 为什么看不到onClick方法?如何纠正 package com.example.fragmenttest170511; import android.support.v4.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; i

这个片段用于理解片段是如何工作的。但是,错误消息“类型ImageFragment必须实现继承的抽象方法View.OnClickListener.onClick(视图)

为什么看不到onClick方法?如何纠正

package com.example.fragmenttest170511;


import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout; 
import android.view.View.OnClickListener;


public class ImageFragment extends Fragment implements View.OnClickListener{

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle       savedInstanceState)
    {
        final LinearLayout layout = new LinearLayout(getActivity());
        layout.setOrientation(LinearLayout.HORIZONTAL);
        Button btnGreen = new Button(getActivity());
        layout.addView(btnGreen);
        btnGreen.setOnClickListener(new OnClickListener() {
    @Override
        public void onClick(View v) {}

    });


        return layout;
    }   
}

这是因为
onClick()
方法实际上不在ImageFragment类中,而是在为按钮的onClick侦听器定义的匿名内部类中

将该方法移到侦听器分配之外,并将其放入ImageFragment类中,如下所示:

public class ImageFragment extends Fragment implements View.OnClickListener{

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle       savedInstanceState)
    {
        final LinearLayout layout = new LinearLayout(getActivity());
        layout.setOrientation(LinearLayout.HORIZONTAL);
        Button btnGreen = new Button(getActivity());
        layout.addView(btnGreen);
        btnGreen.setOnClickListener(this);
        return layout;
    }   

    @Override
    public void onClick(View v) {
        // handle clicks here
    }
}
或者从类声明中删除
implements视图。OnClickListener
,并使用匿名内部类的当前实现


就我个人而言,我总是
实现OnClickListener
而不是匿名的内部类。它们总是让我感到凌乱。或者,如果这是一个特别复杂的视图,我有时会在一个新文件中定义一个不同的新类来单独处理该活动/片段的所有单击。

您实现的是cz listener..只需删除如果你在ImageFragment上实现了onClickListener,你应该重写onClickListener方法。要么实现它,要么删除implements View.onClickListener行。回答得很好,谢谢。我会再给内部类一次机会,然后接受你的建议。我不能通过来自Lambda的意图-获取以下内容“构造函数意图(新视图.OnClickListener(){},类)未定义”。是否无法完成?请忽略该注释。假设为活动而不是片段。再次感谢。